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

Cul*_*lly 4 docker docker-compose

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

Cul*_*lly 8

泊坞窗,撰写了文档有一个标志,看起来很有希望:

-V, --renew-anon-volumes   Recreate anonymous volumes instead of retrieving
                           data from the previous containers.
Run Code Online (Sandbox Code Playgroud)

事实证明这是有效的。如果添加该标志,则会在每个up. 我认为这实际上并没有消除退出时的音量。但它确实解决了在每次运行测试时都需要一个新的数据库实例的根本问题。

最终命令如下所示:

docker-compose -f docker-compose.test.yml up --renew-anon-volumes --abort-on-container-exit --exit-code-from test
Run Code Online (Sandbox Code Playgroud)

注意:旧数据库容器的匿名卷不会被删除(即使在更新匿名卷的启动时)。所以你必须偶尔删除它们(例如docker volume prune)。

由于@BMitch 对该问题的评论,另一个解决方案是在 docker docker-compose down -v-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
Run Code Online (Sandbox Code Playgroud)