多播未发送到所有Docker容器

时间:2016-07-19 12:11:56

标签: docker docker-compose multicast docker-networking

我在docker-compose中定义了3个服务。其中一个发送应该由其他两个服务接收的多播,但只有一个接收它。 2个接收器位于不同的网络中,发送者是两个网络的一部分。

搬运工-compose.yml:

services:
  sender:
    networks:
      - network_a
      - network_b

  receiver1:
    networks:
      - network_a
    depends_on:
      - sender

  receiver2:
    networks:
      - network_b
    depends_on:
      - sender

networks:
  network_a:
    ipam:
      driver: default
      config:
      - subnet: 172.20.1.0/24
        gateway: 172.20.1.1

  network_b:
    ipam:
      driver: default
      config:
      - subnet: 172.20.2.0/24
        gateway: 172.20.2.1

receiver1获取多播,但receiver2没有。

如果我从发送方网络字段中删除network_a,则receiver2会收到该消息。以某种方式多播不会在多个网络上工作。

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:1)

当我发现问题是什么时,我会回答自己。

问题不在于Docker或与Docker有关的任何问题,而是严格意义上的多播问题。

基本上,多播只能在一个网络中工作,而如果你想在多个网络中发送多播消息,你必须遍历所有要使用的网络接口

例如,在Java中,您必须在发送多播消息之前调用 setInterface()方法,以准确指定已使用的网络。 https://docs.oracle.com/javase/7/docs/api/java/net/MulticastSocket.html#setInterface(java.net.InetAddress)