【问题标题】:Multicast not being sent to all Docker containers多播未发送到所有 Docker 容器
【发布时间】:2016-07-19 12:11:55
【问题描述】:

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

docker-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,则接收者 2 会收到消息。不知何故,多播在多个网络上不起作用。

有人知道为什么会这样吗?

【问题讨论】:

  • 看看这里:github.com/docker/docker/issues/23659 从那里引用:“如果你没有将本地接口地址绑定到多播发送方套接字,Linux (afaik) 将选择你的默认路由接口地址。”
  • @CFrei 谢谢你,你是对的,这就是解决方案的路径。

标签: docker docker-compose multicast docker-networking


【解决方案1】:

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

问题不在于 Docker 或任何与 Docker 相关的东西,严格来说是多播问题。

基本上,多播仅适用于一个网络,如果您想在多个网络中发送多播消息,您必须遍历所有网络接口才能使用。

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2022-09-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多