孤立的 Docker 挂载的主机卷?
Orphaned Docker mounted host volumes?
我刚刚检查了我的 /var/lib/docker/volumes 文件夹,发现其中充满了名为 Docker UUID 的文件夹,每个文件夹都包含一个 config.json 文件,其内容为 [=3] =]
{"ID":"UUID","Path":"/path/to/mounted/volume","IsBindMount":true,"Writable":true}
哪里
/path/to/mounted/volume
是主机上安装到 docker 容器上的文件夹的路径,在某些时候使用 -v 开关。我有这样的文件夹可以追溯到我开始使用 Docker 进行实验,即大约 3 周前。
有问题的容器在很久以前就已停止并且 docker 已修复,所以我看不出这些条目没有超过它们的保质期。这引出了一个问题 - 剩下的是我看到的错误还是需要手动丢弃 /var/lib/docker/volumes 中的此类条目?
来自 Docker 用户指南:
If you remove containers that mount volumes, including the initial dbdata container, or the subsequent containers db1 and db2, the volumes will not be deleted. To delete the volume from disk, you must explicitly call docker rm -v against the last container with a reference to the volume. This allows you to upgrade, or effectively migrate data volumes between containers. - source
这是为了避免意外数据丢失的故意行为。您可以使用 docker-cleanup-volumes 之类的工具清除未使用的卷。
对于 Docker 1.9 及更高版本,有一种本地方式:
列出所有孤立卷
$ docker volume ls -qf dangling=true
用
消除所有这些
$ docker volume rm $(docker volume ls -qf dangling=true)
对于 Docker 1.13+ 和 ce/ee 17+ 版本号,使用 volume prune
command
docker volume prune
与 dangling=true
查询不同,这不会删除 "remote" 基于驱动程序的卷。
我刚刚检查了我的 /var/lib/docker/volumes 文件夹,发现其中充满了名为 Docker UUID 的文件夹,每个文件夹都包含一个 config.json 文件,其内容为 [=3] =]
{"ID":"UUID","Path":"/path/to/mounted/volume","IsBindMount":true,"Writable":true}
哪里
/path/to/mounted/volume
是主机上安装到 docker 容器上的文件夹的路径,在某些时候使用 -v 开关。我有这样的文件夹可以追溯到我开始使用 Docker 进行实验,即大约 3 周前。
有问题的容器在很久以前就已停止并且 docker 已修复,所以我看不出这些条目没有超过它们的保质期。这引出了一个问题 - 剩下的是我看到的错误还是需要手动丢弃 /var/lib/docker/volumes 中的此类条目?
来自 Docker 用户指南:
If you remove containers that mount volumes, including the initial dbdata container, or the subsequent containers db1 and db2, the volumes will not be deleted. To delete the volume from disk, you must explicitly call docker rm -v against the last container with a reference to the volume. This allows you to upgrade, or effectively migrate data volumes between containers. - source
这是为了避免意外数据丢失的故意行为。您可以使用 docker-cleanup-volumes 之类的工具清除未使用的卷。
对于 Docker 1.9 及更高版本,有一种本地方式:
列出所有孤立卷
$ docker volume ls -qf dangling=true
用
消除所有这些$ docker volume rm $(docker volume ls -qf dangling=true)
对于 Docker 1.13+ 和 ce/ee 17+ 版本号,使用 volume prune
command
docker volume prune
与 dangling=true
查询不同,这不会删除 "remote" 基于驱动程序的卷。