内网服务器离线部署,docker load 一个 9.8GB 的 vLLM 镜像,到 78% 报 no space left on device,/var/lib/docker 所在分区只剩 12GB,镜像解压后各层加起来要 22GB。
一开始怀疑是「旧镜像和悬空层没有清理」,查了一圈,方向不对。
这类报错背后常见的原因有几处,逐个排除就行。镜像压缩 9.8GB,解压后层加起来 22GB。也可能是docker 的临时目录和存储目录在同一分区。
不容易想到的是,分区是 xfs 但开了 quota 限制。
第一件事是看分区剩余空间和 docker 占用
df -h /var/lib/docker && docker system df
然后清理悬空镜像和构建缓存
docker image prune -a -f && docker builder prune -f
随后把 data-root 迁到更大的数据盘
python -c "print('{\"data-root\": \"/data/docker\"}')"
剩下的就是用 load 的输入流直接落盘再验证
docker load -i vllm.tar && docker images | grep vllm
那几天正好在做别的变更,先把时间线对齐才敢动手。
恢复的判定其实很直接。load 一次完成没有中断,docker images 里能看到镜像且大小与预期一致,/var/lib/docker 剩余空间大于 20%。
容易忽略的是,docker load 需要同时容纳压缩包和解压后的层,空间要按两倍以上准备;迁移 data-root 前先停 docker,否则旧数据会留在原分区。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
