首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未设置docker docker0和容器广播地址

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

Stack Overflow用户
提问于 2015-07-15 23:28:32
回答 1查看 2.7K关注 0票数 11

我正在“对接”一个在已知端口上执行UDP广播心跳的应用程序。这是在各种主机(Fedora、Centos7、SLES12)上使用docker-engine-1.7.0实现的。

我注意到docker主机上的'docker0‘桥和容器内的'eth0’都有一个广播地址0.0.0.0。

假设我拥有主机上的管理员权限,我就可以在docker0上手动设置广播地址。在容器中也是如此(如果容器以特权方式运行,或者使用NET_ADMIN、NET_BROADCAST运行),但是我很好奇为什么广播地址不是默认设置的。是否缺少Docker自动执行此操作的配置选项?

主机:

代码语言:javascript
复制
# ifconfig docker0 broadcast 172.17.255.255 up
# tcpdump -i docker0 -p 5000

容器:

代码语言:javascript
复制
# ifconfig eth0 broadcast 172.17.255.255 up
# echo "Hello world" | socat - UDP-DATAGRAM:172.17.255.255:5000,broadcast

设置广播地址后,从主机到容器的广播也会起作用。

EN

回答 1

Stack Overflow用户

发布于 2018-02-05 21:59:50

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

如果我正确理解了您正在尝试做的事情,那么已知端口上的UDP广播心跳是由属于不同主机的Docker容器来查找彼此的,而不是由同一主机中的不同docker容器使用的。

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

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

如下所示,如果您将一个shell放入docker容器中,您将看到网络环境与运行容器的主机完全相同。如果您的应用程序早些时候使用UDP广播在该服务器上运行,那么它在docker容器中的工作方式将完全相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31434691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档