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