Как в docker compose собрать в одну сеть контейнеры из двух docker compose файлов
Суть такая: Есть два файла docker compose.
- В первом хранится сам проект.
- Во втором хранятся его зависимости (пара нейронок на
tensorflow).
И не очень хочется, чтобы команды: docker-compose up/down/stop затрагивали нейронки.
Как их собрать лишь на сетевом уровне, при помощи network, например?
Ответы (2 шт):
Создайте сеть вручную командой docker network create и потом используйте ее с опцией external: true в обоих файлах:
version: "3.9"
services:
app:
...
networks:
- default
networks:
default:
external: true
name: existing-network
Можно использовать и сеть определенную в одном из двух docker-compose файлов
Недавно решал похожую задачу, у меня есть несколько микросервисов в разных docker-compose. Условно назовем так, есть основной сервис с фронтом и бэком, есть сервис авторизации, это чисто API и есть админка это чисто фронтенд, который взаимодействует с авторизацией и основным сервисом по API. И вот мне понадобилось настроить из взаимодействие
Первый docker-compose
version: '3.7'
services:
api:
....
frontend:
....
pgsql:
....
nginx:
....
Второй docker-compose
version: '3.7'
services:
api:
....
pgsql:
....
nginx:
....
Объединяющий docker-compose
version: '3.7'
services:
nginx: //Здесь в настройках nginx проксирует запросы через location /auth/ и т.п. соответственно на нужные контейнеры
....
networks:
first_default: //Говорим, что есть внешняя сеть контейнеров других
external:
name: first_default
name: admin_default
second_default:
external:
name: second_default
bridge_default: //Убей не помню зачем я мост сделал, но зачем то нужен был, поэтому оставлю, вдруг тоже пригодится
driver: bridge
name: bridge_services
Ну вот и все поднимаем объединяющий композ и с помощью docker exec -ti container-name /bin/sh заходим в него и пингуем интересующие контенйеры по имени, например:
ping first_service_api1
Если пинг есть, значит можно взаимодействовать