gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 21:19:23 27 4
gpt4 key购买 nike

我正在“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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com