Очень легко и удобно оказалось в Докере (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
уже придуман до нас!