如何删除所有的码头卷?

如果我做一个 docker volume ls,我的卷列表是这样的:

DRIVER              VOLUME NAME
local               305eda2bfd9618266093921031e6e341cf3811f2ad2b75dd7af5376d037a566a
local               226197f60c92df08a7a5643f5e94b37947c56bdd4b532d4ee10d4cf21b27b319
...
...
local               209efa69f1679224ab6b2e7dc0d9ec204e3628a1635fa3410c44a4af3056c301

我想一次性删除所有的卷,我该怎么做呢?

75495 次浏览

2017年版本: 这个答案是在16’16年4月16日给出的,现在已经过时了,只对1.13之前的 Docker 版本有效 请使用@VonC 中的答案,现在它被标记为正确

要删除未使用的卷,可以使用内置的 docker volume rm命令。rm命令还会删除 /var/lib/docker/volumes中任何不是卷的目录,所以请确保没有在其中放入任何要保存的内容:
命令列表卷,比你的稍微正确一点:

$ docker volume ls -qf dangling=true

清理:

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

关于 ls 给你,关于 rm 给你的更多细节

移除所有未使用数据(包括没有容器的卷)的官方命令将使用 docker 1.13

docker system prune

如果您想仅限于卷,只删除未使用的卷:

docker volume prune

你还有 docker image prunedocker container prune等等:
详情请看“ < strong > Prune 未使用的 Docker 对象 ”。

参见 犯下86de7c0PR 26108

你可以在 Play-with-docker.com中看到它的运作:

/ # docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
1296a5e47ef3        hello-world         "/hello"            7 seconds ago       Exited (0) 6 seconds ago                       prickly_poincare


/ # docker system  prune
WARNING! This will remove:
- all stopped containers
- all volumes not used by at least one container
- all networks not used by at least one container
- all dangling images
Are you sure you want to continue? [y/N] y
Deleted Containers:
1296a5e47ef3ab021458c92ad711ad03c7f19dc52f0e353f56f062201aa03a35

PR14242和 docker volume命令引入了当前(停靠前1.13)的数量管理方式,从2015年7月开始记录 在其评论中:

docker volume rm $(docker volume ls -q --filter dangling=true)

这就是我发现的有用的东西: https://github.com/chadoe/docker-cleanup-volumes

用于删除/var/lib/docker/books 和/var/lib/docker/vfs/dir 中孤立的 docker 卷的 shell 脚本 Docker 版本1.4.1到1.11. x

它基本上对所有孤立的/悬空的卷进行清理,但是它包含一个 --dry-run,但是它也记录了一些 docker 包含的命令(在 prev 注释中引用)

注意 Docker 1.9及以上版本

要删除 Docker 1.9及以上版本中的孤立卷,还可以使用内置的 Docker 卷命令,而不是使用这个 Docker-clean up-books 脚本。内置命令还会删除/var/lib/docker/books 中任何不是卷的目录,所以请确保没有在其中放入任何要保存的内容:

名单:

$ docker volume ls -qf dangling=true

清理:

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

或者,更好地处理一个特定于 Linux 的无操作:

$ docker volume ls -qf dangling=true | xargs -r docker volume rm

为了回答这个问题,并借用马克的话来说,这是有效的:

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