docker -композиция предназначена для организации нескольких контейнеров в одном файле. Я не знаю содержимого ваших docker -компонентных файлов, но правильный способ - написать один docker-compose.yml
, который может содержать:
version: '3.7'
services:
microservice1_app:
image: ...
volumes: ...
networks:
- service1_app
- service1_db
microservice1_db:
image: ...
volumes: ...
networks:
- service1_db
microservice2_app:
image: ...
volumes: ...
networks:
- service2_app
- service2_db
microservice2_db:
image: ...
volumes: ...
networks:
- service2_db
nginx:
image: ...
volumes: ...
networks:
- default
- service1_app
- service2_app
volumes:
...
networks:
service1_app:
service1_db:
service2_app:
service2_db:
default:
name: proxy_frontend
driver: bridge
Таким образом, nginx
контейнер может связываться с microservice1_app
контейнером через microservice1_app
имя хоста. Если требуются другие имена хостов, его можно настроить с помощью подраздела aliases
в разделе услуг networks
.
Бонус безопасности В приведенной выше конфигурации microservice1_db
виден только microservice1_app
(то же самое для microservice2
) и nginx
может видеть только microservice1_app
и microservice2_app
и доступен снаружи Docker (bridge
mode)