同时检查字节和 inode
no space left on device 可能表示可用字节为零,也可能是 inode 耗尽。在承载 /var/lib/docker 的文件系统上运行 df -h 和 df -i;它可能与主机根目录是不同的挂载点。Docker Desktop 虚拟机、rootless 环境或自定义 data root 都会改变路径。
df -h /var/lib/docker
df -i /var/lib/docker
docker system df -v
回收正确的类别
docker system df -v 会区分镜像、容器、卷和构建缓存。先删除悬空镜像和已停止容器。只有在能接受更慢重建时才清理构建缓存。对失控的容器日志应截断或轮换,而不是删除正在运行的容器。卷是最危险的类别:删除前要检查并备份。
docker image prune
docker container prune
docker builder prune
防止再次发生
在 Docker daemon 中配置日志轮换策略,为镜像和构建缓存设置保留期,并在磁盘和 inode 达到阈值前告警。如果工作负载确实需要更多空间,应把 data root 迁移到更大的卷,而不是反复清理。只在故障后运行的清理不是容量管理。
修复与验证
用有针对性的 prune 命令删除已识别的类别,轮换或截断失控日志,并在需求合理时扩容或迁移 Docker data root,从而修复耗尽。清理后用 df -h、df -i 和 docker system df 验证,然后拉取镜像并启动容器,证明 daemon 可以写入。确认回滚所需的活跃卷和镜像仍然保留,并确认告警会在下一次阈值前触发。