Запуск двух разных контейнеров
Подскажите, можно ли из одного docker-compose собрать 2 разных контейнреа:
version: '3.7'
services:
my-container:
container_name: ${CONTAINER_NAME}
environment:
- DOCKER_COMMAND=${DOCKER_COMMAND}
build:
context: ..
dockerfile: deployments/Dockerfile
И запустить одновременно. Т.е. в одном случае я запускаю:
DOCKER_COMMAND=run CONTAINER_NAME=c1 docker-compose up my-container
После него запускаю:
DOCKER_COMMAND=test CONTAINER_NAME=c2 docker-compose up my-container
Можно ли сделать так, чтобы они оба работали?
Ответы (2 шт):
Через docker-compose так сделать нельзя.
Если посмотреть ману docker-compose up --help, то
If there are existing containers for a service, and the service's configuration or image was changed after the container's creation,
docker-compose uppicks up the changes by stopping and recreating the containers (preserving mounted volumes). To prevent Compose from picking up changes, use the--no-recreateflag.
Тут однозначно написано, что если сервис существует, то он пересоздается с новыми параметрами, а прошлые контейнеры останавливаются.
Я проверил, при старте второго первый завершается с кодом 137. Если для второго вызова использовать флаг --no-recreate, то команда фактически ничего не делает, и аттачится к первому контейнеру.
Вывод: так сделать нельзя, кроме дублирования сервиса в docker-compose.yml или запуска через docker run ... (параметры присоединения в сеть docker-compose, монтирование томов, etc).
Ответ выше не совсем верен можно использовать
docker-compose -p ProjectName up -d
Это позволит запустить с одного файла конфигурации запустить 2 контейнера, остаются только конфликты на уровне портов и имен.