Docker的docker0和容器广播地址未设置。

12

我正在将一个在已知端口上进行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

一旦设置了广播地址,从主机向容器的广播也可以正常工作。


参见:https://serverfault.com/a/881662 - tne
1个回答

0

如果您将NET_ADMIN传递给Docker容器,我不会在应用程序中使用docker0网络。

如果我正确理解您要做的事情,UDP广播心跳在已知端口上被用于Docker容器之间的通信,而不是同一主机上的不同Docker容器之间的通信。

我建议使用--net=host

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

这样,如果您进入Docker容器的shell,您将看到网络环境与运行容器的主机完全相同。如果您的应用程序之前在该服务器上使用UDP广播运行,则在Docker容器中也将以完全相同的方式工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接