Запуск нескольких docker -композиционных переопределений одновременно - PullRequest
0 голосов
/ 22 марта 2020

У меня есть файл docker-compose.yml, настроенный для двух сред: dev и prod:

docker -compose.yml

Содержит общую конфигурацию для обеих сред

version: '3.1'
services:
    homeassistant:
        restart: unless-stopped
        privileged: true
        network_mode: host

docker -compose.dev.yml

Содержит конфигурацию для среды разработки

version: '3.1'
services:
    homeassistant:
        image: registry.gitlab.com/addisonlynch/homeassistant/hass:dev
        container_name: hass-dev

docker -compose.prod.yml

Содержит конфигурацию для производственной среды

version: '3.1'
services:
    homeassistant:
        image: registry.gitlab.com/addisonlynch/homeassistant/hass:prod
        container_name: hass-prod

Я могу запустить среду разработки следующим образом:

docker-compose -f docker-compose.yml -f docker-compose.dev.yml up

и среда prod:

docker-compose -f docker-compose.yml -f docker-compose.prod.yml up

Обе среды работают без нареканий, однако я могу одновременно запустить только одну. Если я попытаюсь раскрутить prod во время работы dev (на том же хосте), контейнеры dev выйдут и будут запущены контейнеры prod (фактически заменив их). Как запустить обе среды одновременно?

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Если вы выполните docker-compose --help, вы увидите:

 -p, --project-name NAME     Specify an alternate project name
                              (default: directory name)

Что это означает, что по умолчанию, когда вы делаете docker-compose up, Compose управляет вашими службами как частью проекта, который назван в честь имени каталога, в котором находится docker-compose.yml файл. Поскольку ваши файлы составления dev & prod находятся в одном каталоге и имеют одинаковые имена служб, Compose не может отличить guish одно от другого.

Имея это в виду, для того, чтобы среда dev и prod работала одновременно, вам нужно указать имя проекта с помощью -p или --project-name флага, например:

docker-compose -f docker-compose.yml -f docker-compose.dev.yml -p dev_env up

Другой вариант - использовать COMPOSE_PROJECT_NAME переменную среды, такую ​​как:

COMPOSE_PROJECT_NAME=dev_env docker-compose -f docker-compose.yml -f docker-compose.dev.yml up

Потенциальная проблема в вашем случае может быть host режим сети, если оба dev и prod использовать те же порты. В этом случае тот, кого вы запускаете вторым, не сможет запуститься.

1 голос
/ 22 марта 2020

Как уже упоминалось здесь , вы можете использовать опцию -p, чтобы задать имя проекта контейнеров и запустить его несколько раз с разными именами префиксов для контейнеров.

docker-compose -p dev

docker-compose -p prod

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...