Використання --add-host або extra_hosts з docker-compose


79

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

Мені не вистачає способу зв’язати деякі мої справжні сервери з цим середовищем без жорсткого кодування ip-адреси. За допомогою docker runви можете --add-hostдодати ще один рядок у /etc/hostsфайл. Чи є спосіб зробити щось подібне за допомогою docker-compose?

Відповіді:


92

У мене чудові новини: це буде в Compose 1.3!

Я використовую його в поточному RC (RC1) так:

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

3
Для кожного, хто знайшов це, щоб помилитися, сказавши непідтримувану директиву конфігурації "extra-hosts", це не "extra-hosts", це "extra_hosts".
Prasanth

75

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

extra_hosts - Додайте зіставлення імен хостів. Використовує ті самі значення, що і параметр клієнта docker --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

11
Не підтримується при побудові
вигнаний

1
Здається, посилання порушено. Ось правильний: docs.docker.com/compose/compose-file/#extra_hosts
Pablo Torrecilla

1
Як я можу зіставити зовнішнє ім'я (не IP) з псевдонімом контейнера?
Адріано дос Сантос Фернандес

Ви маєте на увазі встановити ім’я хосту? -h HOSTNAME docs.docker.com/engine/userguide/networking/default_network/... Або використовуйте псевдонім у docker-compose: docs.docker.com/compose/compose-file/#aliases
oneklc

7

Базовий docker-compose.ymlз додатковими хостами:

version: '3'
services:
api:
    build: .
    ports:
        - "5003:5003"
    extra_hosts:
        - "your-host.name.com:162.242.195.82" #host and ip
        - "your-host--1.name.com your-host--2.name.com:50.31.209.229" #multiple hostnames with same ip
        

Вміст у /etc/hostsфайлі у створеному контейнері:

162.242.195.82  your-host.name.com
50.31.209.229   your-host--1.name.com your-host--2.name.com

Ви можете перевірити /etc/hostsфайл за допомогою таких команд:

$ docker-compose -f path/to/file/docker-compose.yml run api bash  # 'api' is service name
#then inside container bash
root@f7c436910676:/app# cat /etc/hosts

4

Здається, це повинно бути можливим сказати:

extra_hosts:
 - "loghost:localhost"

Отже, якщо частина після двокрапки (як правило, це IP-адреса) не починається з цифри, тоді буде виконано роздільну здатність, щоб знайти IP-адресу для localhost та додати щось на зразок контейнера / etc / hosts:

127.0.0.1 loghost

... припускаючи, що localhost вирішує до 127.0.0.1 на хост-системі.

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

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

Насправді може бути трохи краще додати це до docker, а не docker-compose - docker-compose може просто отримати його автоматично, якщо Docker отримає його.

На жаль, для зміни IP-адреси для цього, ймовірно, знадобиться відмова контейнера.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.