遇到 no space left on device 报错时,真正卡住拉取的往往是悬空镜像,清理需分步:先用 docker image prune -f 删除 dangling=true 镜像,再用 docker image prune -a -f 清理未被引用的带名镜像,接着用 docker volume prune -f 处理 dangling volumes,最后可选 docker system prune -a -f --volumes 一键清理。

遇到 no space left on device 报错时,真正卡住拉取的往往不是正在用的镜像,而是大量堆积的悬空镜像(dangling images)——它们没标签、没容器引用,却占着几GB到几十GB空间。清理它们不难,关键是分清类型、按顺序操作,避免误删或反复失效。
确认并删除悬空镜像
悬空镜像是构建缓存残留或标签重打后“脱标”的中间层,显示为 <none>:<none></none></none>。先看有多少:
-
docker images -f "dangling=true"—— 列出全部悬空镜像 -
docker image prune -f—— 直接清理,跳过确认
这一步通常能释放 5–20 GB,尤其在频繁跑 PyTorch 实验(如 pytorch/pytorch:2.6-cuda11.8-devel)后效果明显。
顺手清理未被引用的带名镜像
只清悬空镜像不够。那些有名字、但没被任何容器(包括已停止的)使用的镜像,比如你 pull 过 nginx:1.25 和 nginx:1.26,却只用后者,前者就闲置了:
- 先确保没有需保留的旧容器:
docker ps -a - 再执行:
docker image prune -a -f
注意:-a 表示“所有未被引用的镜像”,不是“所有镜像”。只要当前没容器依赖它,就会被删。
别漏掉悬挂卷(dangling volumes)
卷不会随容器自动删除。训练中挂载的 /workspace 卷,删了容器却没删卷,就会变成悬挂状态,单个可能占几十GB:
- 查看:
docker volume ls -f "dangling=true" - 清理:
docker volume prune -f
如果不确定某个卷是否还在用,用 docker volume inspect <name></name> 看 Mountpoint 和关联容器字段。
一键收尾(谨慎使用)
如果磁盘告急且环境干净(无需保留的停止容器、网络、构建缓存),可用系统级清理:
docker system prune -a -f --volumes
它会同时清理:停止容器、悬空镜像、未用网络、构建缓存、未用卷。生产环境慎用,开发机上可快速回血。











