Назад | Перейти на главную страницу

Как разрешить докер-контейнерам видеть друг друга по имени?

У меня есть экземпляр mongo, работающий в контейнере с именем mongo1 который открыл порт 27017. Я могу нормально подключиться с хоста.

У меня есть еще один контейнер, в котором запущено приложение, которое хочет подключиться к экземпляру mongo.

Как я могу подключить 2 контейнера, чтобы имя хоста mongo1 открыт для другого контейнера и может подключаться к mongo1:27017 ?

Дело в том, что сеть докеров по умолчанию не позволяет name >> DNS отображение.

Контейнеры в сети моста по умолчанию могут обращаться друг к другу только по IP-адресам, если вы не используете параметр --link, который считается устаревшим. В определяемой пользователем сети моста контейнеры могут разрешать друг друга по имени или псевдониму.

Итак, я создал новую сеть:

docker network create -d bridge br0

а затем добавили контейнеры в эту сеть:

docker network connect br0 mongo1
docker network connect br0 wiki

теперь они могут видеть друг друга по имени.

Для существующих контейнеров (как временное решение)

docker inspect <mango_container_name> | grep IPAddress

и отредактировать / добавить /etc/hosts внутри контейнера

docker exec -it -u 0 <app_container_name> bash

затем изнутри карты контейнера имя_контейнера с IP-адресом .. Пример

echo "172.15.0.5 mango1" >> /etc/hosts

exit

.......
Или вы можете назначить имя хоста для контейнера во время его создания с помощью

docker run -it -h mango1 mango_image

и / или добавить пример echo "172.17.0.5 mango1" >> /etc/hosts команда в файлах докеров для уменьшения головной боли