控制 docker-机器(使用 NAT)传出端口
controlling docker-machine (using NAT) outgoing port
我在 docker 容器(在 osx 上的 docker 机器中)中有 freeradius,它在特定端口 (1812) 上发送 UDP 数据包。我在容器内的日志显示在 1812 发送,但是当我在主机 (OSX) 上嗅探数据包时,它在某个随机的 UDP 端口上。
有没有办法控制 docker-机器的传出端口? ie -> 容器在 1812 发送,主机也在 1812 离开。
我应该为此使用 virtualbox 端口转发吗?
这取决于容器运行。
如果它与 -P
(publish) option 一起使用,则会将任何 EXPOSE 端口映射到随机主机端口。
确保在容器 运行time 将您的端口映射到固定端口(-p 1912:1812
:-p hostPort:ContainerPort
),并确保在您的 VM 网络设置中进行端口转发如“Connect to a Service running inside a docker container from outside”。
虽然我无法弄清楚如何在 运行 NAT 模式下强制 docker-机器的传出数据包的源端口。我确实通过在 virtualbox 中添加桥接适配器解决了我的问题。这会将 docker-机器接口放在您的 LAN 上,并且它将获得一个 IP 地址。这从等式中删除了 NAT,来自容器的数据包保留了传出源端口。
此 virtualbox 配置可以通过 GUI 或 运行 以下命令完成。
docker-machine stop <machine-name>
VBoxManage modifyvm <machine-name> --nic3 bridged --bridgeadapter3 en0
docker-machine start <machine-name>
正如 VonC 还指出的那样,当 运行 您的 docker 容器时,您确实需要使用 -p 标志发布端口。
我在 docker 容器(在 osx 上的 docker 机器中)中有 freeradius,它在特定端口 (1812) 上发送 UDP 数据包。我在容器内的日志显示在 1812 发送,但是当我在主机 (OSX) 上嗅探数据包时,它在某个随机的 UDP 端口上。
有没有办法控制 docker-机器的传出端口? ie -> 容器在 1812 发送,主机也在 1812 离开。
我应该为此使用 virtualbox 端口转发吗?
这取决于容器运行。
如果它与 -P
(publish) option 一起使用,则会将任何 EXPOSE 端口映射到随机主机端口。
确保在容器 运行time 将您的端口映射到固定端口(-p 1912:1812
:-p hostPort:ContainerPort
),并确保在您的 VM 网络设置中进行端口转发如“Connect to a Service running inside a docker container from outside”。
虽然我无法弄清楚如何在 运行 NAT 模式下强制 docker-机器的传出数据包的源端口。我确实通过在 virtualbox 中添加桥接适配器解决了我的问题。这会将 docker-机器接口放在您的 LAN 上,并且它将获得一个 IP 地址。这从等式中删除了 NAT,来自容器的数据包保留了传出源端口。
此 virtualbox 配置可以通过 GUI 或 运行 以下命令完成。
docker-machine stop <machine-name>
VBoxManage modifyvm <machine-name> --nic3 bridged --bridgeadapter3 en0
docker-machine start <machine-name>
正如 VonC 还指出的那样,当 运行 您的 docker 容器时,您确实需要使用 -p 标志发布端口。