Docker 时,遇到 "No space left on device" 错误
在使用 Docker 时,遇到 "No space left on device" 错误,通常意味着宿主机的磁盘空间已满。以下是一些常见的原因和解决办法:
1. 清理 Docker 容器、镜像和卷
删除未使用的容器
列出所有停止的容器:
docker ps -a -f status=exited
删除所有停止的容器:
docker rm $(docker ps -a -f status=exited -q)
删除未使用的镜像
列出所有悬空(dangling)镜像:
docker images -f dangling=true
删除所有悬空镜像:
docker rmi $(docker images -f dangling=true -q)
删除未使用的卷
列出所有未使用的卷:
docker volume ls -f dangling=true
删除所有未使用的卷:
docker volume rm $(docker volume ls -f dangling=true -q)
自动清理未使用的数据
你可以使用以下命令自动清理未使用的容器、网络、镜像和卷:
docker system prune
如果你还想删除所有未使用的卷,可以使用:
docker system prune --volumes
2. 检查 Docker 的存储驱动和数据目录
检查 Docker 数据目录使用情况
Docker 通常将其数据存储在 /var/lib/docker
目录下。你可以检查该目录的磁盘使用情况:
du -sh /var/lib/docker
检查 Docker 存储驱动
Docker 使用不同的存储驱动来管理镜像和容器。可以通过以下命令查看当前使用的存储驱动:
docker info | grep 'Storage Driver'
根据存储驱动的不同,可能需要不同的清理策略。
3. 清理系统日志和临时文件
系统日志和临时文件可能会占用大量磁盘空间。
清理系统日志
在 Linux 上,可以使用以下命令清理日志:
sudo journalctl --vacuum-time=2d
这将删除超过 2 天的日志。你可以根据需要调整时间。
清理临时文件
使用以下命令清理临时文件:
sudo rm -rf /tmp/*
4. 检查和调整 Docker 的磁盘配额
如果你在使用 OverlayFS 或其他存储驱动,可以通过配置 Docker 来限制其磁盘使用。编辑 Docker 的配置文件(通常是 /etc/docker/daemon.json
),添加类似以下的配置:
{
"storage-opts": [
"overlay2.size=20G"
]
}
然后重启 Docker 服务:
sudo systemctl restart docker
5. 检查并扩展磁盘空间
如果以上方法都无法解决问题,可能需要扩展宿主机的磁盘空间。以下是一些可能的操作:
- 添加新的磁盘或扩展现有磁盘。
- 将 Docker 数据目录移动到更大的磁盘或分区。
- 停止 Docker 服务:
sudo systemctl stop docker
- 将数据目录移动到新的位置:
sudo mv /var/lib/docker /new/path/docker
- 创建一个符号链接:
sudo ln -s /new/path/docker /var/lib/docker
- 重启 Docker 服务:
sudo systemctl start docker
- 停止 Docker 服务:
通过这些步骤,你应该能够解决 "No space left on device" 错误。如果问题依然存在,请检查系统日志和 Docker 日志以获取更多信息。