2016-07-19 7 views
1

3 가지 서비스가 docker-compose에 정의되어 있습니다. 그 중 하나는 다른 두 서비스에서 수신해야하는 멀티 캐스트를 보내지 만 그 중 하나만 수신합니다. 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가 멀티 캐스트를 얻을 수 있지만, 수신기 2 않습니다.

보낸 사람 네트워크 필드에서 network_a를 제거하면 receiver2가 메시지를 수신합니다. 어떻게 든 멀티 캐스트는 여러 네트워크에서 작동하지 않습니다.

왜 이런 일이 발생하는지 알고 있습니까?

+1

여기에서보십시오 : https://github.com/docker/docker/issues/23659 인용구 : "로컬 인터페이스 주소를 멀티 캐스트 송신기 소켓에 바인드하지 않으면 Linux (afaik)가 기본 라우트 인터페이스 주소를 선택하십시오. " – CFrei

+0

@CFrei 고맙습니다. 당신이 옳았습니다. 그것은 해결책의 길이었습니다. – timeFly

답변

1

문제가 무엇인지 알았을 때 스스로 답할 것입니다.

문제가 Docker 또는 Docker 관련 문제가 아니므로 멀티 캐스트 문제입니다.

기본적으로 멀티 캐스트는 하나의 네트워크에서만 작동하며 멀티 네트워크에서 멀티 캐스트 메시지를 보내려면 모든 네트워크 인터페이스을 반복해야합니다.

예를 들어, 자바에서는 정확하게 사용 된 네트워크를 지정하기 위해 멀티 캐스트 메시지를 보내기 전에 setInterface() 메서드를 호출해야합니다. https://docs.oracle.com/javase/7/docs/api/java/net/MulticastSocket.html#setInterface(java.net.InetAddress)

+0

또한 이것은 많은 도움이되었습니다. http://stackoverflow.com/a/29526884/3283292 – timeFly