我在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使用特定的源端口?
答案 0 :(得分:0)
您可以控制容器的源端口,但是当您在docker之外甚至与主机进行通信时,请求将通过NAT层,从而将源更改为具有随机端口的主机。您也许可以修改iptables规则来解决此NAT效应。
但是,如果您确实需要像这样控制源端口,则最好切换到主机网络(--net=host
或network_mode: host
,具体取决于您运行容器的方式),或者更改为诸如macvlan之类的网络驱动程序,无需经过NAT规则即可直接公开容器。