67

我刚刚检查了我的 /var/lib/docker/volumes 文件夹,发现其中充满了名为 Docker UUID 的文件夹,每个文件夹都包含一个 config.json 文件,其内容类似于

{"ID":"UUID","Path":"/path/to/mounted/volume","IsBindMount":true,"Writable":true}

在哪里

/path/to/mounted/volume

是主机上的文件夹的路径,该文件夹在某个时候使用 -v 开关安装到 docker 容器上。我有这样的文件夹可以追溯到我开始使用 Docker 的实验,即大约 3 周前。

有问题的容器在很久以前就被停止并 docker rm'ed,所以我看不到这些条目没有超过他们的保质期。这就引出了一个问题 - 我看到了一个错误,还是需要手动丢弃 /var/lib/docker/volumes 中的这些条目?

4

3 回答 3

150

对于 Docker 1.9 及更高版本,有一种原生方式:

列出所有孤立卷

$ docker volume ls -qf dangling=true

消除所有这些

$ docker volume rm $(docker volume ls -qf dangling=true)

于 2016-02-01T12:47:50.593 回答
28

来自 Docker 用户指南:

如果删除装载卷的容器,包括初始 dbdata 容器,或后续容器 db1 和 db2,则不会删除卷。要从磁盘中删除卷,您必须针对最后一个容器显式调用 docker rm -v 并引用该卷。这允许您在容器之间升级或有效迁移数据卷。-来源

这是避免意外数据丢失的故意行为。您可以使用docker-cleanup-volumes 之类的工具来清理未使用的卷。

于 2015-01-07T07:34:36.047 回答
9

对于 Docker 1.13+ 和 ce/ee 17+ 版本号,使用volume prune命令

docker volume prune

dangling=true查询不同,这不会删除基于“远程”驱动程序的卷。

于 2017-03-23T23:04:54.623 回答