Я столкнулся с проблемой докеров и 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.
Любая помощь оценена!
Возможно, связано: https://docs.docker.com/engine/userguide/networking/default_network/binding/ – nwinkler
Вы сопоставляете порт с контейнером на хост? Docker не делает этого по умолчанию, поэтому пока amqp: // rabbitmq: 5672 будет разрешать и подключаться между контейнерами в одной сети Docker, amqp: //docker.mycompany.com: 5672 не будет подключаться, если вы специально не настроили его как таковой. –
Да, порт сопоставлен, и я могу получить доступ к контейнерам снаружи. –