Docker - подключение к открытому порту в контейнере - PullRequest
0 голосов
/ 25 июня 2018

Я новичок в Docker и, возможно, это то, что я до конца не понимаю, но я пытаюсь подключиться к открытому порту в работающем Docker-контейнере.Я извлек и запустил контейнер rabbitmq из концентратора (https://hub.docker.com/_/rabbitmq/). Контейнер rabbitmq должен использовать порт 5672 для подключения клиентов.

После запуска контейнера (как указано на странице концентратора):

$ docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3

Теперь я хочу сделать telnet в открытом сообщении (это возможно при обычной установке rabbitmq и также должно быть в контейнере).

У меня (по крайней мере, я так думаю) получил IP-адрес контейнера с помощью следующей команды:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id

И результат, который я получил, был 172.17.0.2. Когда я пытаюсь получить доступ с помощью telnet 172.17.0.2 5672, это не удается.

Адрес 172.17.0.2 кажется мне странным, потому что, если я запускаю ipconfig на своей машине, я не вижу интерфейса, использующего адрес 172.17.0.x. Я вижу Ethernet adapter vEthernet (DockerNAT), используя следующий ip: 10.0.75.1Это так, как и должно быть?

Если я сделаю привязку порта (добавив -p 5672:5672), я могу подключиться к этому порту с помощью telnet localhost 5672 и подключиться напрямую.

Что такоеЯ здесь скучаю?

1 Ответ

0 голосов
/ 25 июня 2018

Как вы указали, для достижения необходимого результата вам нужно привязать порт, потому что вы запускаете приложение по мостовой сети по умолчанию (в Windows, я думаю).

Из официального докера

Контейнеры, подключенные к одной и той же определяемой пользователем мостовой сети, автоматически открывают все порты друг для друга, а порты - для внешнего мира. [...] Если вы запускаете один и тот же стек приложений в мостовой сети по умолчанию, вам нужно открыть как веб-порт, так и порт базы данных, используя для каждого из них флаг -p или --publish. Это означает, что хост Docker должен блокировать доступ к порту базы данных другими способами.

Позже в хабе rabbitmq есть ссылка на плагин управления, который запускается при выполнении команды

docker run -d --hostname my-rabbit --name some-rabbit -p 8080:15672 rabbitmq:3-management

Который предоставляет порт 8080, используемый для управления, который, я думаю, вам может понадобиться. Вы также должны заметить, что они говорят о кластерах и узлах там, возможно, они имели в виду контейнер, который будет запускаться как служба в рое (следовательно, используя оверлейную сеть, а не мостовую).

Надеюсь, что смогу как-нибудь помочь:)

...