docker磁盘空间不足需分层清理:先用docker system prune -f安全清理退出容器、悬空镜像、未用网络和构建缓存;再执行docker builder prune -f重点清除hyperf多阶段构建产生的海量小层;最后结合docker-compose down --rmi local和docker images -f "dangling=true" -q | xargs -r docker rmi精准剔除残留。

Hyperf 部署时镜像体积大、构建层多,加上频繁迭代容易堆积大量无用镜像和构建缓存,导致 /var/lib/docker 分区迅速占满——这是空间不足的典型场景。清理不能只删几个镜像,得从根源定位、分层清理、并兼顾后续部署稳定性。
先确认到底是空间还是 inode 耗尽
很多服务器显示磁盘还有 5%~10% 剩余,却报 no space left on device。这是因为 Hyperf 多阶段构建会产生海量小层文件,极易耗尽 inode:
- 查磁盘使用:
df -h /var/lib/docker——看 Use% 是否 ≥95% - 查 inode 使用:
df -i /var/lib/docker——若 IUse% ≥98%,说明是小文件爆炸,需重点清理构建缓存和悬空层
优先执行安全高效的系统级清理
docker system prune 是最稳妥的起点,它不会误删运行中服务,也不会动数据卷:
- 基础清理(推荐首次运行):
docker system prune -f→ 清掉退出容器、悬空镜像、未用网络、构建缓存 - 深度清理(确认无旧镜像依赖后):
docker system prune -a -f→ 连带删除所有未被任何容器引用的镜像(含带 tag 的旧版本) - 额外清理构建缓存(对 Hyperf 构建特别有效):
docker builder prune -f
针对性清除 Hyperf 相关残留资源
Hyperf 项目常配合 docker-compose 使用,down --rmi 能精准联动清理:
- 进入项目目录,执行:
docker-compose down --rmi all→ 停止服务 + 删除 compose 中定义的所有镜像(包括 nginx:alpine、php:8.2-cli 等基础镜像) - 若只想清本地构建镜像(保留远程拉取的官方镜像),改用:
docker-compose down --rmi local - 再手动清理残留:运行
docker images -f "dangling=true" -q | xargs -r docker rmi删除所有<none>:<none></none></none>镜像层
长期规避:迁移 Docker 根目录或限制构建缓存
单靠清理治标不治本。Hyperf 持续部署需长期策略:
- 将
data-root迁移至大容量分区(如/data/docker):
编辑/etc/docker/daemon.json,添加"data-root": "/data/docker",重启 docker 服务 - 在 CI/CD 脚本中加入自动清理步骤,例如每次部署前执行:
docker system prune -af && docker builder prune -f - Hyperf 构建时启用
--no-cache或定期docker builder prune --keep-storage 1g限制缓存大小











