控制docker-machine(使用NAT)传出端口

时间:2016-01-30 00:24:26

标签: macos docker docker-machine freeradius

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

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

我应该为此使用虚拟机端口吗?

2 个答案:

答案 0 :(得分:1)

这取决于容器的运行方式 如果是-P (publish) option,则会将任何EXPOSE&#d端口映射到随机主机端口。

确保在容器运行时将您的端口映射到固定端口(-p 1912:1812-p hostPort:ContainerPort),并确保在VM网络设置中将其端口转发为" { {3}}"

答案 1 :(得分:1)

虽然我还没有能够弄清楚在运行NAT模式时如何强制源端口为docker-machine的输出数据包。我通过在virtualbox中添加桥接适配器来解决我的问题。这将docker-machine接口放在您的LAN上,它将获得一个IP地址。这将从等式中删除NAT,并且来自容器的数据包保留传出源端口。

此虚拟框配置可以通过GUI或运行以下命令来完成。

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

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