Назад | Перейти на главную страницу

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

В 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, а не каким-то внешним образом.)

TL; DR: это все еще невозможно 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 отменяет команду, определенную в службе конфигурация.

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

docker-compose rm -f

-f, --force Не запрашивать подтверждение удаления

Это не часть Dockerfile или docker-compose.yml spec, это только параметр cli для команды запуска, поэтому ответ - нет. Для принуждения вам нужно будет полагаться на что-то внешнее.

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