2017-01-04 1 views
2

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

  • RabbitMQ
  • MessageConsumer

Если 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.

Любая помощь оценена!

+0

Возможно, связано: https://docs.docker.com/engine/userguide/networking/default_network/binding/ – nwinkler

+0

Вы сопоставляете порт с контейнером на хост? Docker не делает этого по умолчанию, поэтому пока amqp: // rabbitmq: 5672 будет разрешать и подключаться между контейнерами в одной сети Docker, amqp: //docker.mycompany.com: 5672 не будет подключаться, если вы специально не настроили его как таковой. –

+0

Да, порт сопоставлен, и я могу получить доступ к контейнерам снаружи. –

ответ

0

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

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