2015-01-07 63 views
59

我只是检查了我的/ var/lib中/泊坞窗/卷的文件夹,并发现与命名为码头工人的UUID的文件夹,每个都包含有沿孤立的Docker装入主机卷?

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

其中

行内容的config.json文件爆棚
/path/to/mounted/volume 

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

有问题的集装箱已经停了很久,码头工人很久以前就没有看到那些物品没有超过他们的销售日期。这引出了问题 - 剩下的是我看到一个错误还是需要手动抛弃/ var/lib/docker/volumes中的这些条目?

回答

133

对于泊坞窗1.9及以上有一个土办法:

列出所有孤儿卷与

$ docker volume ls -qf dangling=true

消除所有的人都用

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

+1

我的客户端在新行上打印每个卷名称,因此该命令仅删除第一个卷,然后将其他卷作为命令处理。我用'sed'去除换行符: 'docker volume rm $(docker volume ls -qf dangling = true | sed':a; N; $!ba; s/\ n// g')' – emc

+0

@ emc,对于某些人来说,for循环可能比使用sed:'for v in $(docker volume ls -qf dangling = true)更具可读性;码头工作人员要求“$ v”;完成;' – Kevin

+1

@Kevin Xargs也是非常可读的:'docker volume ls -qf'dangling = true'| xargs docker volume rm' – emc

28

从泊坞窗的用户指南:

如果删除安装卷,包括初始dbdata容器或接下来的容器DB1和DB2的容器,卷将不会被删除。要从磁盘删除卷,必须显式调用docker rm -v对最后一个容器的卷引用。这使您可以升级或在容器之间有效迁移数据卷。 - source

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

+3

是。讨厌,不是吗?我认为我们将很快获得更多处理卷的工具。 –

+0

特别是如果你突然发现你的磁盘已满,并且试图进入Mac上的docker本机。 –

6

对于泊坞1.13+和ce/ee 17+版本号,请使用volume prune command

docker volume prune 

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