如何在退出时使用docker-compose删除匿名卷

时间:2019-05-20 19:18:02

标签: docker docker-compose

我有一个用于运行集成测试的docker-compose文件。它设置为--exit-code-from测试服务,因此在完成测试后,所有容器都将停止。测试中涉及数据库服务。它创建一个匿名卷。由于这些是测试,因此我不想在两次运行之间保留数据库。如果我使用的是docker-compose down,我也许可以使用-v(文档说它会删除命名卷;也许它也适用于匿名卷?)。所以我的问题是,如何告诉docker-compose up在退出时删除匿名卷?

1 个答案:

答案 0 :(得分:1)

docker-compose up文档的标志看上去很有希望:

-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 up出口之后运行docker-compose down -v(您仍可以按下已停止的容器,因为它们尚未被移除)。这实际上将在退出时删除匿名卷。我不确定如果您使用-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