如何删除所有Docker卷?


91

如果执行docker volume ls,我的卷列表如下所示:

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

我想一次删除所有卷。我该怎么做?

Answers:


188

删除所有未使用的数据(包括不带容器的卷)的官方命令将与docker 1.13一起使用。

docker system prune  

如果要仅限制卷,请仅删除未使用的卷

docker volume prune

您也有docker image prunedocker container prune等等:
请参阅“ 修剪未使用的Docker对象 ”中的更多内容。

参见commit 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

管理卷的电流(预搬运工1.13)的方式与引进PR 14242和docker volume命令,这些文件在其评论从2015年7月:

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

太好了,谢谢。我不知道新prune命令。
treeface '17

3
prune命令很棒,但是请小心使用它们。似乎他们假设容器在您调用它们时正在运行。它将清除可能关联但未积极使用的事物(例如网络),从而在下次启动现有容器时导致失败。dangling如果您不确定会被修剪的内容,请提前使用过滤器:)
jocull

docker system prune似乎并没有删除本地卷,而是docker volume prune对其进行了整理
Maciek Rek

23

于2017年编辑:这个答案是在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更多的细节在这里,约马币这里


1
如果不--dry-run首先使用参数测试悬挂卷的列表,我将无法运行它。
Sergei Rodionov

没有--dry-run选择。
哈拉尔德·阿尔伯斯

1
如果您要删除所有卷,则此答案就是一个答案。谢谢!
Mücahit耶尔马兹

5

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

Shellscript删除/ var / lib / docker / volumes和/ var / lib / docker / vfs / dir中的孤立docker卷Docker版本1.4.1到1.11.x

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

关于Docker 1.9及更高版本的注意事项

要删除Docker 1.9及更高版本中的孤立卷,您还可以使用内置的docker volume命令代替此docker-cleanup-volumes脚本。内置命令还会删除/ var / lib / docker / volumes中不是卷的任何目录,因此请确保您未在​​其中保存任何要保存的目录:

清单:

$ 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

3

为了回答这个问题并向Marc借用,它的工作原理是:

$ docker volume rm $(docker volume ls -qf dangling=true | xargs)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.