У меня есть файл docker-compose, который я использую для запуска интеграционных тестов. Он настроен на --exit-code-from
тестовую службу, поэтому, когда тесты завершены, все контейнеры останавливаются. В тесте задействована служба базы данных. Он создает анонимный том. Поскольку это тесты, я не хочу хранить базу данных между запусками. Если бы я использовал docker-compose down
, я мог бы использовать -v
(в документе говорится, что он удаляет именованные тома; может быть, он работает и для анонимных томов?). Итак, мой вопрос: как мне сказать docker-compose up
удалять анонимные тома при выходе?
Спасибо, @BMitch. Это отличное предложение. Я обновил свой ответ ниже.
В документах докер-компоновать есть многообещающий флаг:
-V, --renew-anon-volumes Recreate anonymous volumes instead of retrieving
data from the previous containers.
И оказывается, что работает. Если вы добавите флаг, база данных «перестраивается» на каждом up
. Я не думаю, что это на самом деле удаляет громкость при выходе. Но это решает основную проблему, связанную с потребностью в новом экземпляре базы данных при каждом запуске тестов.
Финальная команда выглядит так:
docker-compose -f docker-compose.test.yml up --renew-anon-volumes --abort-on-container-exit --exit-code-from test
ПРИМЕЧАНИЕ. Анонимные тома контейнера старой базы данных не удаляются (даже при запуске, который обновляет анонимные тома). Поэтому вам придется время от времени удалять их (например, docker volume prune
).
ОБНОВЛЕНИЕ (лучшее решение)
Другое решение, благодаря комментарию @BMitch к вопросу, состоит в том, чтобы просто запустить docker-compose down -v
после выхода из команды docker-compose up (вы все еще можете закрыть остановленные контейнеры, потому что они не были удалены). Это фактически удалит анонимный том при выходе. Я не уверен, как бы вы это сделали, если бы у вас был -d
, но поскольку я не использую этот флаг (я хочу увидеть запуск тестов), эта команда работает:
docker-compose -f docker-compose.test.yml up --abort-on-container-exit --exit-code-from test
docker-compose -f docker-compose.test.yml down -v
docker-compose -f docker-compose.test.yml down -v
это ответ
@Clintm Я обновил свой ответ, чтобы было понятнее, что это, вероятно, лучшее решение. Спасибо!
Вы все еще можете запустить
down
после выхода из контейнеров. Остановленный контейнер — это не то же самое, что удаленный контейнер.