如何删除所有Docker卷?

bwitn5fc  于 2023-10-16  发布在  Docker
关注(0)|答案(5)|浏览(134)

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

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

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

vngu2lb8

vngu2lb81#

移除所有未使用数据(包括没有容器的卷)的官方命令将在Docker 1.13中发布。

docker system prune

如果只想限制卷,removing only unused volumes

docker volume prune

还有docker image prunedocker container prune等:
查看更多关于“Prune unused Docker objects
参见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

当前(Docker 1.13之前)的卷管理方式是由PR 14242 and the docker volume command引入的,它在2015年7月的评论中记录了:

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

wgmfuz8q2#

编辑于2017年:这个答案是在2016年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 here的细节,关于rm here

68bkxrlz

68bkxrlz3#

为了回答这个问题,借用马克的话,这是可行的:

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

yptwkmov4#

这是我发现的有用的东西: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
ckx4rj1h

ckx4rj1h5#

如果您想删除特定的凭证,请使用 * 删除,例如runner-*
先做ls
命令docker volume ls --format '{{ .Name }}' | grep -E "^runner-*"
如果你想改变字符串,用你的卷名替换runner的名字
然后用remove volume命令合并
docker volume rm $(docker volume ls --format '{{ .Name }}' | grep -E "^runner-*")

相关问题