Как связать контейнеры 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 уже придуман до нас!

Читать в телеграм.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *