多播不被发送到所有的Docker容器

我有3个服务在docker-compose中定义。 其中一个发送一个应该由另外两个服务接收的多播,但是只有其中一个接收它。 这两个接收器在不同的networking中,发送者是两个networking的一部分。

泊坞窗,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不支持。

如果我从发送方networking字段中删除network_a,则receiver2会收到该消息。 多播不能在多个networking上工作。

有谁知道为什么发生这种情况?

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

这个问题不在Docker或Docker的相关内容中,严格来说是一个多播的问题。

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

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