docker-compose run
имеет флаг --rm
который автоматически удаляет контейнер после запуска. Мне интересно, соответствует ли theres эквивалентная конфигурация с docker-compose.yml для конкретной службы, так как одна из тех служб, которые я получил в yml, - это один процесс сборки, который должен просто выводить файл компиляции и исчезать сам.
Автоматически удалять контейнер с помощью docker-compose.yml
Ответ 1
Я не нашел никакой возможности помочь вам определить это поведение в файле docker-compose.yml
, и я думаю, что объяснение таково:
docker-compose up
builds, (re)creates, starts, и attaches to containers for a service.
Поскольку ваш images
собран и containers
вашего сервиса запущен, вы можете использовать docker-compose stop
и docker-compose start
для запуска/остановки вашего сервиса. Это отличается от docker-compose down
, который:
Останавливает контейнеры и удаляет контейнеры, сети, тома и изображения, созданные в
up
.
Проблема с тем, что вы пытаетесь сделать:
Если вы docker-compose up
и один из ваших контейнеров завершают свою задачу и удаляются (автоматически), то вы не можете docker-compose stop
и docker-compose start
снова. Удаленный контейнер не будет там, чтобы start
его снова.
Возможно, вы захотите взглянуть на:
Ответ 2
Я не уверен, что понимаю, что запуск docker-compose --user является опцией, а docker-compose.yml поддерживает ключ пользователя (http://docs.docker.com/compose/yml/#working95dir-entrypoint- user-hostname-domainname-mem95limit-privileged-restart-stdin95open-tty-cpu95shares).
Ответ 3
Моим решением было создание небольшого bash-скрипта, который впоследствии автоматически удаляет контейнеры - он не работает в автономном режиме, но я полагаю, что это не такая уж большая проблема.
Если вы работаете в macOS, вы можете поместить этот скрипт в usr/local/bin
. Предполагая, что он называется d-c
, вы можете запустить chmod +x usr/local/bin/d-c
, чтобы сделать его исполняемым.
В Windows я понятия не имею, как заставить это работать, но в Linux это должно быть похоже.
#! /bin/bash
if [[ $1 == "up" ]]; then
# runs "docker-compose up" and then "docker-compose down"
docker-compose up "${@:2}"; docker-compose down
elif [[ $1 == "run" ]]; then
# "d-c run" automatically adds the --rm flag
docker-compose run --rm "${@:2}"
else
# any other d-c command runs docker-compose normally
docker-compose "${@:1}"
fi
Ответ 4
Просто запустите docker-compose up && docker-compose rm -fsv
🙂