在 docker 个容器之间启用广播
Enable broadcasts between docker containers
我一直在尝试在几个容器之间启用一些 UDP 发现。
调出来容器默认禁用了广播,missing brd for inet in:
$ ip addr show dev eth0
27: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 00:00:01:4f:6a:47 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.12/16 scope global eth0
valid_lft forever preferred_lft forever
堆栈:
- 主机:ubuntu14.04
- 容器:ubuntu12.04
- docker 1.8.3
如何启用广播?到目前为止,这是我尝试过的方法:
ip link set dev eth0 broadcast 172.17.255.255
给出 RTNETLINK answers: Invalid argument
- 与 --privileged 容器相同
- 与 NET_ADMIN 和 NET_BROADCAST 容器功能相同
截至目前(Docker 18.06+)UDP 广播开箱即用,只要您使用默认桥接网络 和 所有容器 运行 在 相同的 主机上(当然在相同的 docker 网络中)。
使用 docker-compose 服务会自动 运行 在同一网络中,因此 docker-compose.yml
:
version: '3.4'
services:
master-cat:
image: alpine
command: nc -l -u -p 6666
slave-cat:
image: alpine/socat
depends_on:
- master-cat
entrypoint: ''
command: sh -c "echo 'Meow' | socat - UDP4-DATAGRAM:255.255.255.255:6666,so-broadcast"
with docker-compose up
将显示 Meow 在 master-cat(原文如此!)。
如果您想在 跨 多台主机上使用广播,docker 附带的默认网络插件无法做到这一点。 -> https://github.com/moby/moby/issues/17814. But a more sophisticated overlay network plugin, such as Weave 应该 工作(我没有测试过...)
我一直在尝试在几个容器之间启用一些 UDP 发现。 调出来容器默认禁用了广播,missing brd for inet in:
$ ip addr show dev eth0
27: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether 00:00:01:4f:6a:47 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.12/16 scope global eth0
valid_lft forever preferred_lft forever
堆栈:
- 主机:ubuntu14.04
- 容器:ubuntu12.04
- docker 1.8.3
如何启用广播?到目前为止,这是我尝试过的方法:
ip link set dev eth0 broadcast 172.17.255.255
给出RTNETLINK answers: Invalid argument
- 与 --privileged 容器相同
- 与 NET_ADMIN 和 NET_BROADCAST 容器功能相同
截至目前(Docker 18.06+)UDP 广播开箱即用,只要您使用默认桥接网络 和 所有容器 运行 在 相同的 主机上(当然在相同的 docker 网络中)。
使用 docker-compose 服务会自动 运行 在同一网络中,因此 docker-compose.yml
:
version: '3.4'
services:
master-cat:
image: alpine
command: nc -l -u -p 6666
slave-cat:
image: alpine/socat
depends_on:
- master-cat
entrypoint: ''
command: sh -c "echo 'Meow' | socat - UDP4-DATAGRAM:255.255.255.255:6666,so-broadcast"
with docker-compose up
将显示 Meow 在 master-cat(原文如此!)。
如果您想在 跨 多台主机上使用广播,docker 附带的默认网络插件无法做到这一点。 -> https://github.com/moby/moby/issues/17814. But a more sophisticated overlay network plugin, such as Weave 应该 工作(我没有测试过...)