2017-01-04 1 views
2

docker 및 Java 네트워킹 문제로 어려움을 겪고 있습니다. 도커 작성을 통해 시작된 여러 컨테이너가 있습니다. 어떤 사람들은 다른 사람들과 이야기해야합니다. 예를 들어 한 컨테이너가 RabbitMQ를 시작하고 다른 컨테이너가 RabbitMQ를 시작합니다. 컨테이너 이름으로 연결하는 URL을 사용하면 모든 것이 잘 작동합니다. 그러나 실제 docker 호스트 이름 주소를 사용하고 싶습니다 (사용하는 구성 파일을 도커 컨테이너 외부의 외부 시스템에서 사용할 수 있음). 그러면 이상하게 작동하지 않습니다.이 ping이 작동하지만 Java 코드가 Docker에서 호스트에 도달 할 수없는 경우

  • messageconsumer가 amqp://rabbitmq:5672에 액세스하도록 구성된 경우
  • messageconsumer, 그것은 잘 연결

    • rabbitmq : 는 그래서 내가 두 개의 컨테이너가 있다고 가정 해 보자. 그러나 내 콘테이너는 호스트 docker.mycompany.com에 말하고있다. 내가 amqp://docker.mycompany.com:5672을 URL로 사용한다면, 나의 메시지 소비자 자바 코드 barfs는 java.net.NoRouteToHostException: Host is unreachable이다.

      그러나 messageconsumer 컨테이너에서 쉘을 시작하면 ping docker.mycompany.com이 작동합니다! 왜 셸과 ping은 호스트 주소를 찾지 만 Java는 찾지 못합니까? 내 이미지는 openjdk : alpine을 기반으로합니다.

      도움을 주셨습니다.

    +0

    아마도 관련 : https://docs.docker.com/english/userguide/networking/default_network/binding/ – nwinkler

    +0

    컨테이너의 포트를 호스트에 매핑하고 있습니까? Docker는 기본적으로이 작업을 수행하지 않으므로 amqp : // rabbitmq : 5672가 동일한 Docker 네트워크의 컨테이너를 연결하고 연결하는 반면, 특별히 구성하지 않으면 amqp : //docker.mycompany.com : 5672가 연결되지 않습니다. 그렇게. –

    +0

    예, 포트가 매핑되어 있고 외부에서 컨테이너에 액세스 할 수 있습니다. –

    답변

    0

    나는 똑같은 일을 겪었습니다. 나는 심층적 인 대답이 없으며 아마 그렇지 않을 것이다. 그러나 호스트 네트워킹을 사용하는 것이 이것을 해결했다.

    나는이 이상을 주장하지 않을 것이지만 누군가가 더 나은 대답을 내놓을 때까지 당신을 이끌어 갈 것입니다.

    관련 문제