Docker 运行一段时间后,/var/lib/docker/overlay2目录占用空间过大的处理方案

Docker 运行一段时间后,/var/lib/docker/overlay2(或 overlay)目录占用空间过大是一个常见问题。这通常由以下原因导致:

  1. 镜像层累积:拉取新镜像时旧镜像未被清理

  2. 构建缓存:Dockerfile 构建产生的中间层

  3. 停止的容器:已停止但未删除的容器占用层

  4. 卷(Volumes):未使用的数据卷

  5. 日志文件:容器日志无限增长

1. 快速清理命令(推荐)

bash

复制

复制代码
# 清理所有未使用的数据(容器、镜像、卷、网络、缓存)
docker system prune -a --volumes

# 仅清理未使用的镜像
docker image prune -a

# 仅清理已停止的容器
docker container prune

# 仅清理未使用的卷(谨慎使用)
docker volume prune

注意-a 会删除所有未使用的镜像,不仅仅是悬空镜像。

2. 查看空间占用详情

bash

复制

复制代码
# 查看 Docker 整体磁盘使用情况
docker system df -v

# 查看 overlay2 目录大小
du -sh /var/lib/docker/overlay2

# 查找大文件
du -h /var/lib/docker/overlay2 | sort -rh | head -20

3. 定位具体占用源

bash

复制

复制代码
# 查看哪些容器占用最多空间
docker ps -s

# 查看镜像大小排序
docker images --format "{{.Size}} {{.Repository}}:{{.Tag}}" | sort -hr

# 查找孤儿卷(无容器使用)
docker volume ls -f dangling=true

4. 针对性解决方案

清理特定镜像/容器

bash

复制

复制代码
# 删除特定镜像
docker rmi <image_id>

# 强制删除运行中的容器及其卷
docker rm -vf <container_id>

限制日志大小(治本)

编辑 /etc/docker/daemon.json

JSON

复制

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

然后重启 Docker:sudo systemctl restart docker

清理构建缓存

bash

复制

复制代码
docker builder prune

5. 自动化清理脚本

可以添加到 crontab 定期执行:

bash

复制

复制代码
#!/bin/bash
# docker-cleanup.sh
docker system prune -af --volumes --filter "until=168h"  # 清理7天前的数据

6. 迁移 Docker 目录(空间不足时)

如果磁盘空间确实不足,可以迁移数据目录:

bash

复制

复制代码
# 停止 Docker
sudo systemctl stop docker

# 迁移数据
sudo rsync -avz /var/lib/docker/ /new/path/docker/

# 修改配置 /etc/docker/daemon.json
{
  "data-root": "/new/path/docker"
}

# 重启 Docker
sudo systemctl start docker

建议的清理顺序

  1. 先执行 docker system df 查看占用分布

  2. 先清理 已停止的容器:docker container prune

  3. 再清理 未使用的卷:docker volume prune(确认无重要数据)

  4. 最后清理 镜像:docker image prune -a

  5. 定期执行 docker system prune 或设置定时任务

重要提醒:执行清理前请确认:

  • 没有需要保留的已停止容器

  • 没有重要数据存储在要删除的卷中

  • 生产环境建议先在测试环境验证

相关推荐
考虑考虑15 小时前
docker compose环境变量替换
运维·后端·自动化运维
Java陈序员15 小时前
轻量运维面板!一款现代化的服务器控制面板工具!
运维·服务器·python·react.js·github
bosins16 小时前
WSL 迁移指南:如何将 Linux 环境完整复制到另一台电脑
linux·运维·服务器
IT利刃出鞘16 小时前
Docker Compose--安装WordPress--方法/示例
运维·docker·容器
handler0117 小时前
【Linux】线程与虚拟内存的底层世界
linux·运维·服务器·c++·线程·虚拟地址空间·共享内存
新时代牛马18 小时前
实时 Linux:PREEMPT_RT、延迟来源与观测
linux·运维·服务器
zhexunnb18 小时前
深挖SAP系统模块价值,助力无锡制造企业打通数字化全链路
运维
weipt19 小时前
利用wsl给windows电脑上安装一个ubuntu
linux·运维·ubuntu
jarreyer19 小时前
【软件操作】加快资源管理器打开速度
运维
楚疏笃20 小时前
linux下给OpenCloudOS根目录扩容
linux·运维·服务器