在docker容器之间启用广播

时间:2015-10-27 22:50:38

标签: ubuntu docker ubuntu-12.04 docker-networking

我一直在尝试在几个容器之间启用一些UDP发现。 它调出了默认情况下容器已禁用广播,缺少brd for inet:

$ 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

堆栈:

  • host:ubuntu 14.04
  • container:ubuntu 12.04
  • docker 1.8.3

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

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

1 个答案:

答案 0 :(得分:4)

截至目前(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"
带有docker-compose up

将会在主猫上显示 Meow (原文如此!)。

如果要跨多个主机使用广播,则无法使用docker附带的默认网络插件。 -> https://github.com/moby/moby/issues/17814。但是更复杂的覆盖网络插件,例如Weave 应该可以工作(我尚未测试过……)