我正在将一个在已知端口上进行UDP广播心跳的应用程序“docker化”。这是在各种主机上(Fedora,Centos7,SLES 12)使用docker-engine-1.7.0进行的。
我注意到docker主机上的'docker0'桥和容器内部的'eth0'都有一个广播地址为0.0.0.0。
假设拥有主机管理员权限,我可以手动设置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
一旦设置了广播地址,从主机向容器的广播也可以正常工作。