docker-compose: опция для автоматического удаления контейнера после запуска в docker-compose.yml

24

docker-compose runСсылка утверждает , что она имеет --rmопцию

Удалить контейнер после запуска.

Я хочу сделать это runповедением по умолчанию для некоторых служб, в которых я указал docker-compose.yml.

Итак, вопросы :

  1. Можно ли это как-то указать в docker-compose.yml?
  2. Если это возможно, как я могу это сделать?

( INB4 «Использовать псевдонимы bash, Люк!» : Конечно, я могу применить это за пределами docker-compose.yml, задав некоторые псевдонимы bash, alias docker-compose-run='docker-compose run --rm'но мне интересно, как я могу применить это точно docker-compose.yml, а не каким-то внешним способом.)

Иван Колмычек
источник

Ответы:

10

TLDR: Это все еще невозможно 2018-11 ; использовать docker-compose downилиdocker-compose run --rm

Я хочу дать обновленный ответ на этот вопрос, потому что это почти 3 года спустя. Это спасет других от поиска.

У меня был тот же вопрос, и вот обходные пути, которые я нашел (включая один из самого вопроса):

docker-compose down

который делает следующее:

Останавливает контейнеры и удаляет контейнеры, сети, тома и образы, созданные up.

По умолчанию удаляются только следующие вещи:

- Containers for services defined in the Compose file
- Networks defined in the networks section of the Compose file
- The default network, if one is used

Сети и тома, определенные как внешние, никогда не удаляются.

Хотя вы не можете заявить об этом, docker-compose.ymlэто избавит вас от некоторых хлопот; особенно с объемами и сетями.

docker-compose run --rm

--rm - Удалить контейнер после запуска. Игнорируется в отдельном режиме.

Запускает одноразовую команду для службы. Например, следующая команда запускает веб-сервис и запускает bash в качестве своей команды.

docker-compose run web bash

[...] команда, переданная командой run, переопределяет команду, определенную в конфигурации службы .

[...] команда не создает ни один из портов, указанных в конфигурации службы. Это предотвращает конфликты портов с уже открытыми портами. Если вы хотите, чтобы порты службы создавались и отображались на хосте, укажите флаг --service-ports

docker-compose rm -f

-f, --force Не просить подтвердить удаление

Мо Пад
источник
8

Это не часть Dockerfileили docker-compose.ymlспецификация, это только опция cli для команды run, поэтому ответ - нет. Вам нужно будет полагаться на что-то внешнее для обеспечения соблюдения.

Если у вас есть какой-то инструмент для сборки вашего проекта, обычно лучше обернуть задачи docker-compose в это. Например, наши проекты gradle предоставляют задачи, связанные с докером, которые устанавливают некоторые параметры по умолчанию, такие как --rmзадачи запуска.

Эрик Данненберг
источник