Chr*_*ove 10 udp broadcast docker
我正在"停泊"一个在已知端口上执行UDP广播心跳的应用程序.这是在各种主机上使用docker-engine-1.7.0(Fedora,Centos7,SLES 12).
我注意到docker主机上的'docker0'桥接器和容器内的'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
Run Code Online (Sandbox Code Playgroud)
容器:
# ifconfig eth0 broadcast 172.17.255.255 up
# echo "Hello world" | socat - UDP-DATAGRAM:172.17.255.255:5000,broadcast
Run Code Online (Sandbox Code Playgroud)
一旦设置了广播地址,从主机到容器的广播也可以工作.
如果您要传递NET_ADMIN到 Docker 容器,我docker0根本不会为您的应用程序使用网络。
如果我正确理解你想要做什么,则属于不同主机的 Docker 容器使用已知端口上的 UDP 广播心跳来查找彼此,而不是同一主机中的不同 docker 容器。
然后我建议使用--net=host:
docker run --net=host --cap-add NET_ADMIN ....
像这样,如果您将 shell 放入 docker 容器中,您将看到网络环境与运行容器的主机完全相同。如果您的应用程序之前使用 UDP 广播在该服务器上运行,那么它将在 docker 容器中以完全相同的方式工作。
| 归档时间: |
|
| 查看次数: |
1822 次 |
| 最近记录: |