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


24

У docker-compose runдовідці зазначається, що вона має --rmможливість

Вийміть контейнер після запуску.

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

Отже, питання :

  1. Чи можна це якось вказати в docker-compose.yml?
  2. Якщо це можливо, як я можу це зробити?

( INB4 "Використовуйте псевдоніми bash, Люк!" : Звичайно, я можу це застосувати поза межами docker-compose.yml, встановивши кілька баш-псевдонімів, як, 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

який робить наступне:

Зупиняє контейнери та видаляє контейнери, мережі, томи та зображення, створені вгору.

За замовчуванням вилучені лише речі:

- 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

[...] команда, передана запуском, переосмислює команду, визначену в конфігурації служби .

[...] команда не створює жодного з портів, визначених у конфігурації служби. Це запобігає зіткнення портів з уже відкритими портами. Якщо ви хочете, щоб порти служби були створені та відображалися на хості, вкажіть прапор --service-ports

docker-compose rm -f

-f, --force Не вимагайте підтвердження видалення


8

Це не частина Dockerfileабо docker-compose.ymlspec, це лише варіант cli для команди run, тому відповідь - ні. Вам потрібно буде покластися на щось зовнішнє для примусового виконання.

Якщо у вас є якийсь інструмент збірки для вашого проекту, зазвичай найкраще обробляти завдання для складання докерів. Наприклад, наші gradle-проекти надають завдання, пов'язані з докером, які встановлюють деякі параметри за замовчуванням, наприклад, --rmдля виконання завдань.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.