{"id":14289,"url":"\/distributions\/14289\/click?bit=1&hash=892464fe46102746d8d05914a41d0a54b0756f476a912469a2c12e8168d8a933","title":"\u041e\u0434\u0438\u043d \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b \u043f\u0440\u043e\u0434\u0430\u0436\u0438 \u043d\u0430 5%, \u0430 \u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u0447\u0435\u043a \u2014 \u043d\u0430 20%","buttonText":"","imageUuid":""}

Как связать контейнеры Docker в одну сеть

Очень легко и удобно оказалось в Докере (compose) связывать сети. Раньше сервисы обычно пихал в один compose-файл (или, точнее, лень было разделять специально – как шли “из коробки” – так и запускались).

Но стало неудобно. Совсем неудобно стало, что каждый норовит себе отдельную БД поднять соседним контейнером. И всё равно приходится лезть, и монтирование данных для БД на хостовой ФС прописывать. Ближе к делу:

Первый сервис (у меня – БД), в docker-compose:

version: "3.5" services: postgres: container_name: pglocal # лишнее пропущено networks: - postgres networks: postgres: driver: bridge name: postgres_net

Сеть с драйвером bridge по умолчанию создается, но пусть явно будет прописано.

Второй сервис (автоматизация huginn):

version: "2" services: huginn: container_name: huginn environment: - POSTGRES_PORT_5432_TCP_ADDR=pglocal # лишнее пропущено networks: - huginn networks: huginn: external: name: postgres_net

И всё. Оба сервиса живут внутри сети postgres_net, друг-друга видят по названиям, по ним же и пингуются. huginn использует pglocal в своём конфиге.

Минус вижу – порядок ожидания нужных служб сделать посложней, чем с depends_on и службами в одном файле.

Или через docker-compose -f service1.yml -f service2.yml up все нужные службы пускать (тогда depends_on сработает). Мне не удобно так.

Или через command и внешние скрипты ожидания приходится. Хорошо, что wait-for-it.sh уже придуман до нас!

0
Комментарии
-3 комментариев
Раскрывать всегда