Как удалить анонимные тома при выходе с помощью docker-compose

У меня есть файл docker-compose, который я использую для запуска интеграционных тестов. Он настроен на --exit-code-from тестовую службу, поэтому, когда тесты завершены, все контейнеры останавливаются. В тесте задействована служба базы данных. Он создает анонимный том. Поскольку это тесты, я не хочу хранить базу данных между запусками. Если бы я использовал docker-compose down, я мог бы использовать -v (в документе говорится, что он удаляет именованные тома; может быть, он работает и для анонимных томов?). Итак, мой вопрос: как мне сказать docker-compose up удалять анонимные тома при выходе?

Вы все еще можете запустить down после выхода из контейнеров. Остановленный контейнер — это не то же самое, что удаленный контейнер.

BMitch 20.05.2019 21:23

Спасибо, @BMitch. Это отличное предложение. Я обновил свой ответ ниже.

Cully 20.05.2019 21:35
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
4
2
4 086
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В документах докер-компоновать есть многообещающий флаг:

-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 17.12.2021 17:10

@Clintm Я обновил свой ответ, чтобы было понятнее, что это, вероятно, лучшее решение. Спасибо!

Cully 17.12.2021 22:44

Другие вопросы по теме