适用于 Linux 上的 Docker Engine 24+。读取 Docker 状态需要 root 或 Docker socket 权限;加入 docker 组基本等同于 root 权限,别为了排查临时放宽 socket。先做只读检查:
docker version
docker info --format 'root={{.DockerRootDir}} driver={{.Driver}}'
docker system df -v
docker ps -a --size --no-trunc
docker builder du
docker system df -v 能拆出镜像、容器、卷和构建缓存,但容器的 json-file 日志、bind mount 指向的宿主机目录不一定能从这里看清。日志路径可以逐个核对:
docker ps -aq | while read -r id; do
path=$(docker inspect -f '{{.LogPath}}' "$id")
[ -n "$path" ] && du -h -- "$path"
done | sort -h | tail -n 20
du 若报权限不足,用已有的受控提权方式读取,不要改日志文件权限。再对可疑容器看挂载来源:
docker inspect -f '{{range .Mounts}}{{println .Type .Source "->" .Destination}}{{end}}' CONTAINER
bind mount 的空间要到实际 Source 所在文件系统查,Docker 数据根目录没变大也可能把宿主机别处分区写满。RECLAIMABLE 只表示 Docker 认为对象当前未被引用,不代表业务上可以删;先别直接跑 docker system prune -a --volumes。确认对象归属和保留要求后再定向清理,最后复查 docker system df -v、相关文件系统的 df -hT,并验证容器能正常重建和启动。