0

我有一个在 docker 容器内运行的服务器,监听 UDP 端口,比如说 1234。这个端口在 Dockerfile 中公开。

另外,我有一个外部服务器帮助进行 NAT 遍历,基本上,只是将注册服务器和客户端的地址相互发送,并允许通过注册期间发送的名称连接到服务器。

现在,如果我使用-P选项运行我的容器,我的端口将作为某个随机端口发布,例如 32774。但是在辅助服务器上,我看到我的服务器从端口 1234 连接到它,因此它无法发送正确的地址到一个客户。客户端根本无法连接。

如果我运行容器在同一个端口上显式发布我的服务器-p 1234:1234/udp,客户端可以直接连接到我的服务器。但是现在在辅助服务器上,我看到我的服务器从端口 123 6连接到它,并且它再次无法将正确的端口发送到客户端。

如何解决?我的目标是要求使用我的 docker 镜像的人尽可能少地进行额外配置。

编辑:所以,我需要知道容器内部的外部端口号才能将其发送到发现服务器,据我所知,目前不可能,对吧?或者我需要从容器和我的端口进行传出连接,以使用为传入连接配置的相同外部端口 - 这可能吗?

4

1 回答 1

0

端口由 docker 和 docker 网络适配器管理。单独使用 -P 时,端口在内部暴露在 docker 内部,并可通过 docker 链接访问。使用“1234:1234”时,该端口映射到主机端口,可直接供客户端使用,也可用于链接。

使用链接选项“--link server container/name”启动帮助服务器。帮助服务器将连接到端口 1234 上的主机“服务器”。正确的 IP 地址将由 docker 管理。

启用 docker 以更改您的 iptables 配置,这是 docker 默认设置。之后客户端应该能够连接到这两个实例。请注意,帮助服务器应提供主机 ip 而不是 docker 容器 ip 地址。docker 容器 ip 地址仅在运行 docker 网络适配器的主机内有效。

于 2015-07-09T07:15:32.520 回答