控制docker机(使用NAT)输出端口

我有一个docker容器内的freeradius(在osx上的docker-machine上),它在特定的端口发送一个UDP数据包(1812)。 我的日志在1812年的容器显示发送,但是当我嗅探主机(OSX)上的数据包,它是在一些随机的UDP端口。

有没有办法控制docker-machine中的输出端口? 即 – > 1812年的集装箱发送也在1812年离开主机。

我应该使用virtualbox端口吗?

这取决于容器如何运行。
如果是-P (发布)选项 ,则会将任何EXPOSE端口映射到随机主机端口。

确保在容器运行时将您的端口映射到固定端口( -p 1912:1812 -p hostPort:ContainerPort ),并确保在虚拟机networking设置中端口转发,如“ 连接到运行在从外面的docker集装箱 “。

虽然在运行NAT模式时,我还没有弄清楚如何强制docker-machine的输出数据包的源端口。 我确实通过在virtualbox中添加桥接适配器来解决我的问题。 这将docker-machine接口放在你的局域网上,它将被提供一个IP地址。 这从等式中删除了NAT,来自容器的数据包保留了输出源端口。

这个virtualboxconfiguration可以通过GUI或通过运行以下命令来完成。

 docker-machine stop <machine-name> VBoxManage modifyvm <machine-name> --nic3 bridged --bridgeadapter3 en0 docker-machine start <machine-name> 

由于VonC也声明,在运行docker容器时,您需要使用-p标志发布端口。