Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 控制docker机器(使用NAT)输出端口_Macos_Docker_Docker Machine_Freeradius - Fatal编程技术网

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

Macos 控制docker机器(使用NAT)输出端口,macos,docker,docker-machine,freeradius,Macos,Docker,Docker Machine,Freeradius,我在docker容器(osx上的docker机器中)中有freeradius,它在特定端口(1812)上发送UDP数据包。我在容器中的日志显示1812年发送,但当我在主机(OSX)上嗅探数据包时,它位于某个随机UDP端口上 有没有办法控制docker机器的输出端口?ie->container在1812年发送,也在1812年离开主机 我应该为此使用virtualbox端口转发吗?这取决于容器的运行方式。 若使用,则会将任何公开的端口映射到随机主机端口 确保在容器运行时将您的端口映射到一个固定端口(

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

有没有办法控制docker机器的输出端口?ie->container在1812年发送,也在1812年离开主机


我应该为此使用virtualbox端口转发吗?

这取决于容器的运行方式。
若使用,则会将任何公开的端口映射到随机主机端口


确保在容器运行时将您的端口映射到一个固定端口(
-p 1912:1812
-p hostPort:ContainerPort
),并确保在您的VM网络设置中转发该端口,如“.”

,而我还无法确定如何在运行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>
docker机器停止
VBoxManage modifyvm--nic3桥接--bridgeadapter3 en0
装卸机起动

正如VonC所说,在运行docker容器时,您确实需要使用-p标志来发布端口。

所以您是说我不应该使用-p选项(我目前使用的是“-p 18120:1812”,而是使用VBoxManage来进行端口转发?@roocell您需要两个:发布(即-p选项,而不是-p)控制容器端口在Linux端口(boot2docker端口)上的映射方式。并转发VirtualBox端口,以公开该端口(在tcp中,在您的情况下是udp)对主持人说,我不认为这是docker的问题,我认为这是docker的NAT-machine@roocell首先,如果您的容器使用-P选项运行,这意味着端口到Linux主机的随机映射:这将是一个问题。我刚刚证实了我的怀疑-这是docker机器中的NAT。请参阅我的问题附件中的注释on.虽然你的答案没有错,但我并不是在寻找。ie-在运行NAT模式时控制docker机器的传出端口。经过进一步思考,我认为是docker机器中的NAT导致了我的问题。我的容器(172.16.0.4)在端口1812上发送UDP数据包,但因为docker机器(192.168.99.100)正在进行NAT。它在一个随机端口上作为源端口发送。我还没有确认,但我怀疑Airport Extreme radius客户端希望接收源端口为1812的radius数据包(与radius服务器配置的端口相同)。我在docker机器上创建了第三个适配器,而不是在“桥接适配器”中运行模式。这就给docker机器在我的局域网上提供了一个IP。在这种情况下,一切似乎都正常-证明docker机器NAT是修改源端口的罪魁祸首(显然是NAT的意图)。仍在寻找一个可以完成从NAT'd docker机器更改数据包源端口的答案。我还在上发布了一个问题,因为这越来越成为主机配置网络问题。有趣的反馈,比我的答案更详细。+1