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

标签 udp docker broadcast

我正在“dockerizing”一个在已知端口上进行 UDP 广播心跳的应用程序。这适用于各种主机(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

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

最佳答案

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

如果我正确理解您要执行的操作,属于不同主机的 Docker 容器使用已知端口上的 UDP 广播心跳来相互查找,而不是由同一主机中的不同 Docker 容器使用。

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

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

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

关于udp - docker docker0 和容器广播地址未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31434691/

相关文章:

android - 通过 LocalBroadcastManager 传输的 parcelable 是不可变的吗?

networking - TCP 流与 UDP 消息

udp - 包含 header 的 IP 数据包帧有多大?

docker - 如何使用 docker-compose v2 加入默认桥接网络?

c++ - boost::asio UDP 广播

javascript - AngularJS:指令在页面上多次并发出/广播处理

python - TCP 连接被对等方重置且传输端点未连接

sockets - PHP 套接字 - socket_sendto() - UDP header 不匹配

python - pycharm 无法完成 Docker 的远程解释器设置

linux - Docker daemon.json 日志记录配置无效