docker volume prune无法删除无关联容器的未使用卷,求解答
卷被挂在未运行的Docker服务/栈里:如果用Docker Swarm的
docker stack deploy或者docker service create建过服务,哪怕容器没运行,只要服务定义里挂载了这个卷,docker volume prune就不会删除它。可以用docker service ls列出所有服务,再用docker service inspect <服务名>检查卷挂载情况;要是用Compose栈,就用docker stack ps <栈名>或docker compose ps确认。卷使用了第三方驱动:比如
local-persist这类第三方卷驱动,设计初衷就是让卷持久保留,哪怕没有容器关联,prune命令也不会清理它。执行docker volume inspect 0d4cd922a4ed3e970726b1edb860c7dda3ae1e47f812585d9517d512ae70d5cf查看Driver字段,若不是默认的local,就是这个原因。卷被添加了保留标签:如果给卷设置了
com.docker.volume.prune.stop这类系统保留标签,或者自定义的保留标签,默认情况下docker volume prune不会删除带这类标签的卷。同样用docker volume inspect <卷ID>查看Labels字段确认。prune命令加了过滤条件:要是之前执行docker volume prune时添加了--filter参数(比如按标签过滤),可能刚好把这个卷排除在外了。直接执行无过滤的docker volume prune -f试试。卷是命名卷的ID显示:有些命名卷在
docker volume ls里显示的是ID而非名称,本质是某个命名卷的唯一标识,可能关联着未删除的Compose项目。用docker volume inspect <卷ID>查看Name字段,确认是不是命名卷,再检查对应项目的状态。
内容的提问来源于stack exchange,提问作者aaaaaa

