Подтвердить что ты не робот

Использование --add-host или extra_hosts с помощью docker-compose

Я использую docker-compose для запуска тестовой среды, состоящей из примерно 5 разных контейнеров. Межъядерные ссылки и общие тома (тома-от) работают чудесно. Я также показываю некоторые порты до главной машины, которая работает хорошо.

То, что мне не хватает, - это способ связать некоторые из моих настоящих серверов в этой среде без жесткого кодирования IP-адреса. С помощью docker run вы можете использовать --add-host, чтобы добавить еще одну строку в ваш файл /etc/hosts. Есть ли способ сделать что-то подобное с компоновкой docker?

4b9b3361

Ответ 1

У меня отличная новость: это будет в Compose 1.3!

Я использую его в текущем RC (RC1) следующим образом:

rng:
  build: rng
  extra_hosts:
    seed: 1.2.3.4
    tree: 4.3.2.1

Ответ 2

https://docs.docker.com/compose/compose-file/#extra_hosts

extra_hosts - Добавить сопоставления имени хоста. Используются те же значения, что и в параметре клиента докера --add-host.

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

Запись с IP-адресом и именем хоста будет создана в /etc/hosts> внутри контейнеров для этой службы, например:

162.242.195.82  somehost
50.31.209.229   otherhost

Ответ 3

Это в отставании функции Compose, но похоже, что работа еще не началась. Проблема Github.

Ответ 4

Похоже, следует сказать:

extra_hosts:
 - "loghost:localhost"

Таким образом, если часть после двоеточия (обычно IP-адрес) не начинается с цифры, то будет выполнено разрешение имен, чтобы найти IP для localhost и добавить что-то вроде контейнера /etc/hosts:

127.0.0.1 loghost

... при условии, что localhost разрешается до 127.0.0.1 в хост-системе.

Похоже, было бы действительно легко добавить исходный код docker-compose: функция compose/config/types.py parse_extra_hosts, скорее всего, сделает это.

Для самого докера это, вероятно, было бы добавлено в функцию opts/hosts.go ValidateExtraHost, хотя тогда она больше не проверялась строго, поэтому функция была бы немного ошибочно названа.

На самом деле может быть немного лучше добавить это в docker, а не в docker-compose - docker-compose может просто получить его автоматически, если docker его получит.

К сожалению, это, вероятно, потребовало бы отказов контейнера для изменения IP-адреса.