в docker, tips

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


В данной статье рассмотрим один из весьма полезных флагов, — --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"
...

Добавить комментарий