磁盘空间或inode不足会导致docker镜像拉取失败并反复重试;需先用df -h和df -i定位瓶颈,再通过docker system prune等命令安全清理,同时预留2–3倍镜像空间并配置镜像加速器优化拉取。

磁盘空间不足会导致 Docker 镜像拉取中途失败、反复重试甚至“no space left on device”报错——这不是网络问题,而是存储写入被系统拒绝。关键在于:拉取过程需要先下载层数据,再解压合并到 /var/lib/docker,若空间不足,解压阶段就会中断,已下载的部分可能被丢弃,造成重复拉取。
立即检查空间与 inode 使用情况
别急着删镜像,先定位瓶颈:
- 运行
df -h /var/lib/docker查看所在分区使用率,≥95% 就危险了 - 运行
df -i /var/lib/docker看 inode 使用率,尤其在频繁构建的环境(如 CI/CD 或 PyTorch 镜像),IUse%接近 100% 也会触发同样错误 - 用
du -sh /var/lib/docker/*快速识别占用大户(比如overlay2或buildkit)
安全快速清理无用资源
避免手动 docker rmi 漏删缓存或悬空层:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 清理停止容器、悬空镜像、未用网络:
docker system prune(交互确认,适合日常) - 连带删除所有未被任何容器引用的镜像(含旧 tag):
docker system prune -a - 单独清构建缓存(对 build-heavy 场景效果显著):
docker builder prune - 删掉所有无标签镜像(常被 prune 漏掉):
docker rmi $(docker images -f "dangling=true" -q)
防止拉取中因空间不足自动清理
Docker 在空间紧张时可能主动清理旧层来腾地方,导致刚拉一半的镜像被删,形成“拉取→满→删→重拉”循环:
- 确保拉取前有至少 2–3 倍镜像大小的空闲空间(例如拉一个 1.5GB 镜像,建议预留 ≥4GB)
- 临时扩容可应急:若宿主机支持 LVM,可用
lvextend+resize2fs或xfs_growfs扩展根分区 - 长期规避更推荐迁移
data-root到大容量分区(如/data/docker),配置{"data-root":"/data/docker"}后重启 dockerd
结合网络优化减少重试压力
空间不足常和网络抖动叠加恶化体验(比如拉了一半失败,重试又卡在空间问题上):
- 启用国内镜像加速器(如
https://docker.xuanyuan.me),降低单次拉取耗时与失败概率 - 拉取时加
DOCKER_BUILDKIT=1,提升分层下载恢复能力:DOCKER_BUILDKIT=1 docker pull nginx:alpine - CI/CD 脚本中加入简单重试逻辑(最多 3 次),但只在明确是 I/O 错误时触发,避免无效循环










