2016-07-19 16 views
1

Ich habe 3 Dienste in Docker-Compose definiert. Einer von ihnen sendet ein Multicast, das von den anderen 2 Diensten empfangen werden sollte, aber nur einer von ihnen empfängt es. Die 2 Empfänger befinden sich in unterschiedlichen Netzwerken und der Sender ist Teil beider Netzwerke.Multicast wird nicht an alle Docker-Container gesendet

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 erhält die Multicast aber Empfänger2 nicht.

Wenn ich network_a aus Sendernetzwerkfeld entfernen, empfängt Receiver2 die Nachricht. Irgendwie funktioniert Multicast nicht in mehreren Netzwerken.

Weiß jemand, warum das passiert?

+1

siehe hier: https://github.com/docker/docker/issues/23659 Zitat von dort: "Wenn Sie keine lokale Schnittstellenadresse an den Multicast-Sender-Socket binden, wird Linux (afaik) Wählen Sie Ihre Standardrouten-Schnittstellenadresse. " – CFrei

+0

@CFrei Vielen Dank, Sie hatten Recht, das war der Weg zur Lösung. – timeFly

Antwort

1

Ich werde mich selbst antworten, als ich herausfand, was das Problem war.

Das Problem ist nicht mit Docker oder irgendetwas im Zusammenhang mit Docker, es ist streng genommen ein Multicast Problem.

Grundsätzlich funktioniert Multicast nur in einem Netzwerk und Wenn Sie eine Multicast-Nachricht in mehreren Netzwerken senden möchten, müssen Sie alle zu verwendenden Netzwerkschnittstellen durchlaufen.

Zum Beispiel in Java, würden Sie setInterface() Methode aufrufen müssen, bevor die Multicast-Nachricht sendet genau das verwendete Netzwerk angeben.

+0

Auch das hat mir sehr geholfen: http://stackoverflow.com/a/29526884/3283292 – timeFly