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 或设置定时任务

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

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

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

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

相关推荐
manageengine16 分钟前
PHP2Shell 事件复盘:企业应该如何自查、修复与规模化处置
运维·安全·php
java_logo33 分钟前
Docker 部署 Hue:轻松搭建数据库与数据仓库 SQL 查询平台
数据库·数据仓库·sql·docker·hue·部署教程·轩辕镜像
Initialize2930833 分钟前
Kafka 消息越堆越多、消费越来越慢?五步查清消费积压
运维
时间售卖铺1 小时前
MySQL 表的约束
运维·数据库·mysql·云原生
广州工博科技1 小时前
SAP Joule for Consultants 如何为自动化与集成项目提供支持?
运维·自动化
铁弹神侯1 小时前
Docker 入门
docker
Acrellea1 小时前
数据中心这台新变压器,让配电房的电表全失效了
运维·能源
boy快快长大1 小时前
【Jenkins】入门学习
运维·学习·jenkins
叼烟扛炮2 小时前
Linux 学习笔记(九):自动化构建神器 Make 与 Makefile
linux·运维·服务器
lisanmengmeng2 小时前
监控Kubernetes集群的GPU资源(三)
linux·容器·kubernetes