Автоматически удалять контейнер с помощью docker-compose.yml

docker-compose run имеет флаг --rm который автоматически удаляет контейнер после запуска. Мне интересно, соответствует ли theres эквивалентная конфигурация с docker-compose.yml для конкретной службы, так как одна из тех служб, которые я получил в 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 его снова.


Возможно, вы захотите взглянуть на:

Ответ 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