【发布时间】:2015-07-09 05:45:53
【问题描述】:
我有一个在 docker 容器中运行的服务器,监听 UDP 端口,比如说 1234。这个端口暴露在 Dockerfile 中。
另外,我有一个帮助 NAT 穿越的外部服务器,基本上,只是将注册服务器和客户端的地址相互发送,并允许通过它在注册期间发送的名称连接到服务器。
现在,如果我使用 -P 选项运行我的容器,我的端口将作为某个随机端口发布,例如32774。但是在辅助服务器上,我看到我的服务器从端口 1234 连接到它,因此它无法向客户端发送正确的地址。而且客户端根本无法连接。
如果我使用-p 1234:1234/udp 将我的服务器显式运行在同一端口上,则客户端可以直接连接到我的服务器。但是现在在辅助服务器上,我看到我的服务器从端口 1236 连接到它,但它再次无法将正确的端口发送到客户端。
如何解决?我的目标是让使用我的 docker 镜像的人尽可能少地进行额外配置。
编辑:所以,我需要从容器内部知道我的外部端口号才能将其发送到发现服务器,据我所知,这目前是不可能的,对吧?或者我需要从容器和我的端口进行传出连接,以使用为传入连接配置的相同外部端口 - 这可能吗?
【问题讨论】:
标签: docker nat nat-traversal