清理docker 无用资源

当 Docker 容器的 overlay 文件系统满了时,通常是因为容器或镜像占用了过多的存储空间。以下是解决这个问题的步骤:

  • 检查 Docker 存储使用情况

  • 运行以下命令查看 Docker 使用的磁盘空间:
docker system df

输出会显示:

• 镜像(Images)占用的空间

• 容器(Containers)占用的空间

• 卷(Volumes)占用的空间

• 构建缓存(Build Cache)

2. 清理未使用的资源

2.1 删除停止的容器

停止的容器可能占用大量空间:

docker container prune -f

2.2 删除未使用的镜像

清理未被使用的 Docker 镜像:

docker image prune -af

2.3 删除未使用的卷

清理无用的 Docker 卷:

docker volume prune -f

2.4 清理构建缓存

清理 Docker 构建缓存:

docker builder prune -f

2.5 删除所有不必要的资源

一次性清理所有未使用的资源:

docker system prune -af --volumes

3. 检查 Overlay 目录

Docker 的 overlay 文件系统通常位于 /var/lib/docker/overlay2。可以检查这个目录的大小:

du -sh /var/lib/docker/overlay2/*

删除不必要的层或清理空间:

1. 如果某些层不再使用,可以通过删除相关容器或镜像来清理。

2. 删除无效的缓存文件:

sudo rm -rf /var/lib/docker/overlay2/<layer-id>

4. 增加存储分区

如果清理后仍然空间不足,可以尝试增加存储空间。

4.1 修改 Docker 存储路径

1. 停止 Docker 服务:

sudo systemctl stop docker

2. 将 /var/lib/docker 迁移到更大的磁盘:

sudo mv /var/lib/docker /new/path/docker
sudo ln -s /new/path/docker /var/lib/docker

3. 重启 Docker:

sudo systemctl start docker

4.2 增加分区大小

如果您的服务器允许扩展分区:

• 对云环境:使用云平台扩展卷大小。

• 对物理服务器:调整分区大小并重新挂载。

5. 检查和限制日志大小

Docker 容器的日志文件可能占用大量空间。可以限制日志大小:

1. 创建或编辑 /etc/docker/daemon.json 文件:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

2. 重启 Docker 服务:

sudo systemctl restart docker

6. 检查占用过大的容器

运行以下命令查看各容器的存储占用情况:

docker ps --size

如果某个容器占用空间过大,可以停止并重新创建:

docker stop <container-id>
docker rm <container-id>

7. 优化镜像和容器

1. 减小镜像大小

• 使用较小的基础镜像(如 alpine)。

• 清理构建中的临时文件(rm -rf /tmp/*)。

2. 定期清理旧容器和镜像

• 使用自动化工具,如 cron 或脚本,定期运行清理命令。

取自chatgpt 问答