docker /var/lib/docker/overlay2磁盘满的处理方法

目录

一、问题

二、解决

[1、检查 /var/lib/docker](#1、检查 /var/lib/docker)

1)、containers

2)、volumes

3)、overlay2

2、清理

[1)、清理 containers](#1)、清理 containers)

[2)、清理 volumes](#2)、清理 volumes)

[3)、清理 overlay2](#3)、清理 overlay2)

4)、限制docker日志大小


一、问题

服务器磁盘告警,检查发现docker文件特别大。

bash 复制代码
# df命令是用来查看linux系统服务器文件系统的磁盘使用情况
df -h

二、解决

1、检查 /var/lib/docker

bash 复制代码
# /var/lib/docker 是 docker 的默认目录
cd /var/lib/docker

# 检索文件的最大深度1,即只检索汇总计算当前目录下的文件(或查询当前目录下所有文件和目录的大小,包括子目录中的文件大小(通过汇总子目录的大小))
du -h --max-depth=1

1)、containers

bash 复制代码
# containers是 docker 存储镜像的目录, -json.log 的文件很大,是 docker 的日志文件
du -ha /var/lib/docker/containers/ | grep "json.log" | sort -rh

2)、volumes

bash 复制代码
# 项目工程包及运行日志等
du -ha /var/lib/docker/volumes/ | grep "info.*.log" | sort -rh

3)、overlay2

overlay2 目录 merged 和 diff 占磁盘空间会比较大

diff :是一个只读的文件系统层,它包含了Docker镜像的变更内容。当您对容器进行修改或添加新文件时,这些变更会被记录在 diff 文件夹中。每个Docker镜像都有一个对应的 diff 文件夹,用于存储与基础镜像的差异。

merged:是一个可读写的文件系统层,它是由基础镜像和 diff 文件夹合并而成的。当您启动一个Docker容器时, merged 文件夹中的内容将作为容器的文件系统。这个文件夹是容器运行时的可写层,您可以在容器中对文件进行修改或添加新文件,这些修改将存储在 merged 文件夹中。

2、清理

1)、清理 containers

bash 复制代码
# 创建清理脚本
touch docker_logs_clean.sh

# 赋予读写权限
chmod +777 docker_logs_clean.sh

# 加入脚本:
echo "======== start clean docker containers logs ========"
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean containers logs : $log"
cat /dev/null > $log
done
echo "======== end clean docker containers logs ========"

# 停止docker中的应用后执行脚本
sh docker_logs_clean.sh start

2)、清理 volumes

bash 复制代码
# 如不更新项目,只是想清一下日志,查日志 /var/lib/docker/volumes 
find /var/lib/docker/volumes -name "*.log"

# 命令清除
find /var/lib/docker/volumes -type f -name "*.log" -delete

3)、清理 overlay2

bash 复制代码
# overlay2 目录占磁盘空间大一些了,使用删除镜像和容器的命令清理
docker system prune -a

4)、限制docker日志大小

按照前面的方式清理,隔一段时间后磁盘又会被docker日志占满,这里设置一下日志上限。

编辑 /etc/docker/daemon.json 文件,重启docker

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

systemctl daemon-reload

systemctl restart docker
相关推荐
吴声子夜歌20 分钟前
Shell编程实例——编写安全的shell脚本(二)
linux·运维·shell
悠悠121381 小时前
微服务通信别只看性能:REST 与 gRPC 的 6 个选型判断和一次 502 故障复盘
运维·服务器
zx_741484813 小时前
【Linux入门】Shell 函数、正则表达式与文本处理:cut 与 awk
linux·运维·正则表达式
Zenova EdgeOS3 小时前
Linux dmesg 工业边缘实战:内核日志过滤、持久化与故障定位
linux·运维·边缘计算·工业边缘·dmesg·内核日志
九皇叔叔3 小时前
K8S 资源菜单
docker·容器·kubernetes·k8s
wdfk_prog4 小时前
ROS教程08:从 TransportTCP::connect() 追到 TCPROS Connection Header、序列化与 Socket 数据传输
运维·缓存·docker·容器·ros
Zhu7584 小时前
docker环境快速部署postgresql数据库18及以上版本
postgresql·容器
做运维的阿瑞4 小时前
Python 标准库汇总:分类速览与常用模块清单
linux·运维·python
zoutao985 小时前
Gitea Actions 自定义 Runner 镜像与自动化部署实战
ci/cd·docker·gitea
日常筹谋记5 小时前
自动化仓储安全防护工况评估:明治传感器AS-33C技术适配性分析
大数据·运维·创业创新·业界资讯