Docker网络设置和iptables NAT

时间:2015-07-09 05:45:54

标签: docker nat nat-traversal

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

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

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

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

如何解决这个问题?我的目标是要求使用我的docker镜像的人尽可能少地添加配置。

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

1 个答案:

答案 0 :(得分:0)

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

使用链接选项" - 链接服务器容器/名称"启动帮助程序服务器。帮助服务器将连接到主机"服务器"在端口1234上。正确的IP地址将由docker管理。

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

相关问题