docker docker0和容器广播地址未设置

时间:2015-07-15 15:28:32

标签: udp docker broadcast

我" m" dockerizing"在已知端口上执行UDP广播心跳的应用程序。这是在各种主机上使用docker-engine-1.7.0(Fedora,Centos7,SLES 12)。

我注意到' docker0'在docker主机上的桥梁和' eth0'容器内部的广播地址均为0.0.0.0。

假设主机有admin权限,我可以在docker0上手动设置广播地址。同样在容器中(如果容器正在运行特权或使用NET_ADMIN,NET_BROADCAST),但我很好奇为什么默认情况下不设置广播地址。我是否缺少Docker自动执行此配置选项?

主机:

# ifconfig docker0 broadcast 172.17.255.255 up
# tcpdump -i docker0 -p 5000

容器:

# ifconfig eth0 broadcast 172.17.255.255 up
# echo "Hello world" | socat - UDP-DATAGRAM:172.17.255.255:5000,broadcast

设置广播地址后,从主机到容器的广播也可以正常工作。

1 个答案:

答案 0 :(得分:0)

如果您将NET_ADMIN传递给Docker容器,我根本不会将docker0网络用于您的应用程序。

如果我理解你正在尝试做什么,已知端口上的UDP广播心跳被属于不同主机的Docker容器用于相互查找,而不是由同一主机中的不同docker容器。

然后我建议使用--net=host

docker run --net=host --cap-add NET_ADMIN ....

如果您将shell添加到docker容器中,您会看到网络环境与运行容器的主机环境完全相同。如果您的应用程序之前使用UDP广播在该服务器上运行,它将在docker容器中以完全相同的方式工作。