Пинг работает, но код Java дает сбой, а хост недоступен в Docker

Я в тупике из-за проблемы с сетью докеров и Java. У меня есть несколько контейнеров, запущенных через docker-compose. Некоторым нужно поговорить с другими. Например, один контейнер запускает RabbitMQ, а другой подключается к нему. Все работает нормально, если я использую URL-адреса, которые я подключаю к именам контейнеров. Однако я хотел бы использовать фактический адрес имени хоста докера (чтобы файл конфигурации, который я использую, можно было использовать с внешних компьютеров вне контейнеров докеров), и это странно не работает. Итак, скажем, у меня есть два контейнера:

  • кролик
  • сообщениепотребитель

Если messageconsumer настроен на доступ к amqp://rabbitmq:5672, он подключается нормально. Однако мои контейнеры работают, скажем, на хосте docker.mycompany.com. Если я использую amqp://docker.mycompany.com:5672 в качестве URL-адреса, мой код java messageconsumer не работает с java.net.NoRouteToHostException: Host is unreachable.

Однако, если я запускаю оболочку в контейнере messageconsumer, ping docker.mycompany.com работает! Почему оболочка и пинг находят адрес хоста, а не Java? Мой образ основан на openjdk:alpine.

Любая помощь приветствуется!


person JP Moresmau    schedule 04.01.2017    source источник
comment
Возможно, связано: docs.docker.com/engine/userguide/networking/default_network/   -  person nwinkler    schedule 04.01.2017
comment
Вы сопоставляете порт с контейнера с хостом? Docker не делает этого по умолчанию, поэтому, хотя amqp://rabbitmq:5672 будет разрешать и подключаться между контейнерами в одной и той же сети Docker, amqp://docker.mycompany.com:5672 не будет подключаться, если вы специально не настроили его. как таковой.   -  person Rob Blake    schedule 04.01.2017
comment
Да, порт сопоставлен, и я могу получить доступ к контейнерам извне.   -  person JP Moresmau    schedule 04.01.2017
comment
телнет работает на порту?   -  person Eugen Mayer    schedule 05.01.2017
comment
У меня на изображении нет telnet, но попытка Java-кода на разных открытых портах тоже не сработала. Однако он работает в режиме хост-сети, поэтому я предполагаю, что это задумано. Я переработал свое приложение по-другому, чтобы обойти эту проблему.   -  person JP Moresmau    schedule 06.01.2017


Ответы (1)


Я только что прошел через то же самое. У меня нет подробного ответа и, вероятно, не будет, но похоже, что использование сети HOST решило эту проблему.

Я не буду утверждать, что это идеальный вариант, но он должен заставить вас работать, пока кто-нибудь не предложит лучший ответ.

person blockcipher    schedule 30.01.2017