У меня есть экземпляр 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
команда в файлах докеров для уменьшения головной боли