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 数据目录移动到更大的磁盘或分区。
    1. 停止 Docker 服务:
      sudo systemctl stop docker
      
    2. 将数据目录移动到新的位置:
      sudo mv /var/lib/docker /new/path/docker
      
    3. 创建一个符号链接:
      sudo ln -s /new/path/docker /var/lib/docker
      
    4. 重启 Docker 服务:
      sudo systemctl start docker
      

通过这些步骤,你应该能够解决 "No space left on device" 错误。如果问题依然存在,请检查系统日志和 Docker 日志以获取更多信息。

标签: none

添加新评论