【问题标题】:Docker network settings and iptables NATDocker 网络设置和 iptables NAT
【发布时间】:2015-07-09 05:45:53
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: docker nat nat-traversal


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-17
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多