Docker совет №16: Использование флага --add-host

Mar 8, 2018 09:05 · 243 words · 2 minute read docker dns

В данной статье рассмотрим один из весьма полезных флагов, - --add-host, который можно использовать при запуске docker-контейнеров с помощью команды docker run.

С помощью данного флага мы можем легко изменить сопоставление DNS-имя сервиса определенному ip-адресу внутри контейнера. Параметр --add-host может быть полезен, например, когда нужно подключить службу внутри контейнера к внешнему хосту.

В официальной документации об этом флаге есть краткая, но вполне достаточная информация:

The --add-host flag can be used to add additional lines to /etc/hosts

Проверим с помощью контейнера appropriate/curl (это маленький, alpine-based образ с установленной утилитой curl) доступность сервиса (назовем его test.example.com):

docker run --rm appropriate/curl -sSI test.example.com
curl: (6) Could not resolve host: test.example.com

Все честно - из контейнера не резолвится DNS-имя test.example.com, о чем curl нам и сообщил.

Воспользуемся флагом --add-host:

docker run --rm --add-host=test.example.com:10.0.0.1 appropriate/curl -sSI test.example.com
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Fri, 23 Feb 2018 13:52:47 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Location: https://test.example.com/

Примечание. Конечно же, чтобы получить такой результат, сервис test.example.com должен быть запущен. Если нет желания поднимать отдельный web-сервис только для проверки работы флага --add-host, можно для тестирования использовать ping, а не curl.

Еще один способ проверить, что пара ip-адрес и DNS-имя добавлена, проверить содержимое файла /etc/hosts внутри docker-контейнера:

docker run --rm --add-host=test.example.com:10.0.0.1 appropriate/curl cat /etc/hosts
127.0.0.1	localhost
::1	localhost ip6-localhost ip6-loopback
fe00::0	ip6-localnet
ff00::0	ip6-mcastprefix
ff02::1	ip6-allnodes
ff02::2	ip6-allrouters
10.0.0.1	test.example.com
172.17.0.5	56837f12305b

При работе с утилитой docker-compose и *.yaml-файлами, аналогом ключа --add-host будет конструкция:

...
    extra_hosts:
      - "test.example.com:10.0.0.1"
...
tweet Share