4

我一直在尝试在几个容器之间启用一些 UDP 发现。它调出容器默认禁用广播,缺少 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

堆:

  • 主机:ubuntu 14.04
  • 容器:ubuntu 12.04
  • 码头工人 1.8.3

如何启用广播?这是我到目前为止所尝试的:

  • ip link set dev eth0 broadcast 172.17.255.255RTNETLINK answers: Invalid argument
  • 与 --privileged 容器相同
  • 与 NET_ADMIN 和 NET_BROADCAST 容器功能相同
4

1 回答 1

8

到目前为止(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"

withdocker-compose up将在 master-cat 上显示Meow(原文如此!)。

如果你想多个主机上使用广播,这对于 docker 附带的默认网络插件是不可能的。-> https://github.com/moby/moby/issues/17814。但是更复杂的覆盖网络插件,例如Weave 应该可以工作(我还没有测试过......)

于 2018-09-03T22:31:00.230 回答