我在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会收到该消息。以某种方式多播不会在多个网络上工作。
有谁知道为什么会这样?
答案 0 :(得分:1)
当我发现问题是什么时,我会回答自己。
问题不在于Docker或与Docker有关的任何问题,而是严格意义上的多播问题。
基本上,多播只能在一个网络中工作,而如果你想在多个网络中发送多播消息,你必须遍历所有要使用的网络接口。
例如,在Java中,您必须在发送多播消息之前调用 setInterface()方法,以准确指定已使用的网络。 https://docs.oracle.com/javase/7/docs/api/java/net/MulticastSocket.html#setInterface(java.net.InetAddress)