在 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

堆栈:

如何启用广播?到目前为止,这是我尝试过的方法:

截至目前(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 应该 工作(我没有测试过...)