Ответ 1
У меня отличная новость: это будет в Compose 1.3!
Я использую его в текущем RC (RC1) следующим образом:
rng:
build: rng
extra_hosts:
seed: 1.2.3.4
tree: 4.3.2.1
Я использую docker-compose
для запуска тестовой среды, состоящей из примерно 5 разных контейнеров. Межъядерные ссылки и общие тома (тома-от) работают чудесно. Я также показываю некоторые порты до главной машины, которая работает хорошо.
То, что мне не хватает, - это способ связать некоторые из моих настоящих серверов в этой среде без жесткого кодирования IP-адреса. С помощью docker run
вы можете использовать --add-host
, чтобы добавить еще одну строку в ваш файл /etc/hosts
. Есть ли способ сделать что-то подобное с компоновкой docker?
У меня отличная новость: это будет в Compose 1.3!
Я использую его в текущем RC (RC1) следующим образом:
rng:
build: rng
extra_hosts:
seed: 1.2.3.4
tree: 4.3.2.1
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
Это в отставании функции Compose, но похоже, что работа еще не началась. Проблема Github.
Похоже, следует сказать:
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-адреса.