无法在Docker中设置udp源端口

时间:2018-11-19 19:18:05

标签: docker udp

我在Windows 10上使用Docker 18.06.1-ce-win73并尝试执行以下udp操作:

Docker端口10001 -------------->主机端口10620

主机上运行的应用程序必须从端口10001接收数据包。

在docker容器内部,使用python将IP绑定到IP('0.0.0.0',10001),然后使用套接字将数据包发送到端口16020上的主机IP。

我还使用-p 10001:10001 / udp参数启动了容器。 不幸的是,当在主机应用程序上接收到数据包时,原始端口不是10001,而是随机端口。

在从容器内部使用UDP时是否可以强制docker使用特定的源端口?

1 个答案:

答案 0 :(得分:0)

您可以控制容器的源端口,但是当您在docker之外甚至与主机进行通信时,请求将通过NAT层,从而将源更改为具有随机端口的主机。您也许可以修改iptables规则来解决此NAT效应。

但是,如果您确实需要像这样控制源端口,则最好切换到主机网络(--net=hostnetwork_mode: host,具体取决于您运行容器的方式),或者更改为诸如macvlan之类的网络驱动程序,无需经过NAT规则即可直接公开容器。