Докер не разрешает имя хоста
Мне нужно знать имена хостов (или IP-адреса) какого-либо контейнера, работающего на той же машине. Как я уже прокомментировал здесь (но пока без ответа), я использую docker-compose
, В документации сказано, что compose автоматически создаст запись имени хоста для всех контейнеров, определенных в том же docker-compose.yml
файл:
Каждый контейнер для службы присоединяется к сети по умолчанию и доступен для других контейнеров в этой сети и может быть обнаружен ими с именем хоста, идентичным имени контейнера.
Но я не вижу ни одной записи хоста через docker exec -it my_container tail -20 /etc/hosts
, Я тоже пытался добавить links
в мой контейнер, но ничего не изменилось.
1 ответ
Docker 1.10 представил некоторые новые сетевые функции, которые включают внутренний DNS-сервер, на котором выполняется поиск хоста.
В мостовой сети по умолчанию (docker0) поиски продолжают работать через /etc/hosts
как они привыкли. /etc/resolv.conf
будет указывать на ваши резольверы хостов.
В определенной пользователем сети Docker будет использовать внутренний DNS-сервер. /etc/resolv.conf
будет иметь внутренний IP-адрес для сервера Docker DNS. Эта настройка позволяет мостовым, пользовательским и оверлейным сетям работать аналогичным образом. Таким образом, оверлейная сеть на рое будет заполнять данные хоста со всего роя, как это делает локальная мостовая сеть.
"Устаревшая" настройка была сохранена, чтобы новые сетевые функции могли быть введены без влияния на существующие установки.
открытие
DNS-распознаватель может предоставлять IP-адреса для службы создания докеров через имя этой службы.
Например, с web
а также db
сервис определен, а db
сервис масштабируется до 3
, все db
экземпляры будут разрешать:
$ docker-compose run web nslookup db
Name: db
Address 1: 172.22.0.4 composenetworks_db_2.composenetworks_mynet
Address 2: 172.22.0.5 composenetworks_db_3.composenetworks_mynet
Address 3: 172.22.0.3 composenetworks_db_1.composenetworks_mynet