排查Docker大卷(300GB)占用来源及无法删除问题
Docker未被引用卷的占用排查方法
以下是针对无法清理的Docker卷的具体排查步骤:
定位卷的宿主机存储路径
先获取卷在宿主机上的实际挂载目录:docker inspect VOLUME_NAME | grep -E "Mountpoint|Source"输出通常类似
/var/lib/docker/volumes/[VOLUME_NAME]/_data,记下来这个路径。查找占用该路径的进程
使用lsof直接扫描目录下的所有打开文件:lsof +D /var/lib/docker/volumes/VOLUME_NAME/_data如果
lsof无结果,换用fuser排查:fuser -vm /var/lib/docker/volumes/VOLUME_NAME/_data这两个命令会列出所有持有该卷内文件句柄的进程,包括容器内进程(容器进程在宿主机有对应PID)。
检查所有容器的卷关联
绕过docker ps的filter,直接遍历所有容器的挂载信息:docker ps -a --format '{{.ID}}: {{.Mounts}}' | grep VOLUME_NAME找到关联容器后,用
docker inspect [CONTAINER_ID]确认其状态(比如是否处于暂停、已退出但未清理的特殊状态)。排查Docker相关服务的占用
检查Docker守护进程或附属服务是否持有文件句柄:ps aux | grep docker结合
lsof -p [PID]查看这些进程的打开文件列表,确认是否关联目标卷。扫描宿主机所有进程的文件描述符
如果以上方法都没结果,直接遍历所有进程的文件描述符查找路径引用:find /proc -name "fd" -type d | xargs grep -l "/var/lib/docker/volumes/VOLUME_NAME/_data"结果会显示持有该路径引用的进程PID,再用
ps -p [PID]查看进程详情。
内容的提问来源于stack exchange,提问作者Karl
相关产品推荐
相关产品推荐

