Docker не разрешает имя хоста

Мне нужно знать имена хостов (или IP-адреса) некоторого контейнера, работающего на той же машине. Как я уже прокомментировал здесь (но пока нет ответа), я использую docker-compose. В документации говорится, что compose автоматически создаст запись имени хоста для всех контейнеров, определенных в том же docker-compose.yml файле. :

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

Но я не вижу никакой записи хоста через docker exec -it my_container tail -20 /etc/hosts. Я также пытался добавить links в свой контейнер, но ничего не изменилось.


person Munchkin    schedule 05.09.2016    source источник
comment
можете показать docker-compose.yml?   -  person Bukharov Sergey    schedule 05.09.2016
comment
Вы провели какое-то тестирование, чтобы узнать, будет ли докер разрешать имена хостов других контейнеров? Или вы просто спрашиваете, как обнаружить эти имена хостов?   -  person Vince Bowdren    schedule 05.09.2016
comment
Второе. Мои контейнеры могут обнаруживать друг друга по их именам контейнеров.   -  person Munchkin    schedule 05.09.2016


Ответы (1)


В Docker 1.10 появились новые сетевые функции, включая внутренний DNS-сервер, на котором выполняется поиск узлов.

В мостовой сети по умолчанию (docker0) поиски продолжают работать через /etc/hosts, как и раньше. /etc/resolv.conf будет указывать на преобразователи ваших хостов.

В определяемой пользователем сети Docker будет использовать внутренний DNS-сервер. /etc/resolv.conf будет иметь внутренний IP-адрес для DNS-сервера Docker. Эта настройка позволяет мостовым, пользовательским и оверлейным сетям работать аналогичным образом. Таким образом, оверлейная сеть в рое будет заполнять данные хоста со всего роя, как это делала бы локальная мостовая сеть.

«Устаревшая» настройка была сохранена, поэтому новые сетевые функции можно было вводить, не влияя на существующие настройки.

Открытие

Преобразователь DNS может предоставлять IP-адреса для службы создания докеров через имя этой службы.

Например, если определена служба web и db, а служба db масштабирована до 3, все экземпляры db будут разрешены:

$ docker-compose run --rm 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
person Matt    schedule 05.09.2016
comment
Знаете ли вы, как получить имена доступных служб, работающих внутри контейнера? docker-compose config --service делает это с хоста, но не внутри контейнера, а cat /etc/resolv.conf просто показывает nameserver 127.0.0.11 options ndots:0 - person user1717828; 09.10.2018
comment
Вы можете запустить это с помощью --rm или получить кучу контейнеров, которые вам не нужны. - person keyboardSmasher; 27.05.2019