Docker 存储清理:merging 层问题处理
当 Docker 存储驱动使用 overlay 或 overlay2 时,可能会出现 "merging" 层占用大量磁盘空间的情况。以下是清理 Docker merge 层的几种方法:
1. 识别合并层和占用空间情况
首先确认磁盘占用情况:
docker system df
# 或更详细的版本
docker system df -v查看 Docker 存储驱动使用情况:
docker info | grep "Storage Driver"2. 清理无用 Docker 对象
基本清理命令
# 删除所有停止的容器
docker container prune
# 删除所有未被使用的网络
docker network prune
# 删除所有悬挂镜像 (dangling images)
docker image prune
# 删除所有未被使用的卷
docker volume prune
# 一键执行上述所有清理 (交互式确认)
docker system prune
# 强制清理所有未被使用的对象 (无需确认)
docker system prune -a -f针对性清理
# 删除特定日期的容器
docker container ls -a --filter "until=24h" | awk '{print $1}' | xargs docker rm
# 删除未被任何容器引用的镜像
docker image ls -qf dangling=true | xargs docker rmi3. 手动清理 overlay2 存储目录(慎用)
找出 Docker 存储位置:
docker info | grep "Docker Root Dir"通常是 /var/lib/docker/overlay2
清理步骤:
# 首先停止 Docker 服务
sudo systemctl stop docker
# 备份重要数据后,清理 overlay2 目录
sudo rm -rf /var/lib/docker/overlay2/*
# 重新启动 Docker
sudo systemctl start docker⚠️ 注意:这会删除所有 Docker 数据!仅在所有容器和镜像都可重建时使用。
4. 清理容器日志文件
# 查看日志文件大小
sudo du -ha /var/lib/docker/containers/ | grep ".*-json.log" | sort -h
# 清空日志文件(不影响正在运行的容器)
sudo truncate -s 0 /var/lib/docker/containers/*/*-json.log
# 或设置日志轮转
sudo nano /etc/docker/daemon.json添加以下配置:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}然后重启 Docker:
sudo systemctl restart docker5. 预防性措施
设置存储驱动参数
在 /etc/docker/daemon.json 中添加:
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true",
"overlay2.size=50G"
]
}定期清理脚本示例
#!/bin/bash
# 自动清理 Docker 资源的脚本
echo "=== 开始 Docker 系统清理 ==="
date
echo "1. 清理停止的容器..."
docker container prune -f
echo "2. 清理悬挂镜像..."
docker image prune -f
echo "3. 清理 Builder 缓存..."
docker builder prune -f
echo "4. 清理日志文件..."
find /var/lib/docker/containers/ -name "*-json.log" -type f -delete
echo "=== 清理完成 ==="
df -h /保存为 docker-cleanup.sh 并设置为定期执行。
注意事项
- 生产环境中执行清理前,确保备份重要容器和数据
docker system prune -a会删除所有未被使用的镜像,包括可能被其他项目依赖的基础镜像- 清理操作可能需要停止相关容器服务
- 如果问题频繁出现,考虑调整 Docker 存储驱动或迁移数据目录到更大分区
通过这些方法,可以有效地清理 Docker 的 merging 层和相关存储空间占用问题。

此处评论已关闭