前言
在日常生产环境中,我们通常会使用Docker来做容器化管理,通过运行容器来执行任务。但是,随着业务量的不断扩大,容器的不断启动,往往会出现磁盘空间不足的情况。
1、查看当前磁盘使用情况
df -h
其中Use%过大的目录需要排查
2、进入目录,查看当前目录下的文件大小
du -sh *
发现containers目录、overlayer2目录、volumes目录占用空间比较大
containers目录
进入某个容器目录,发现里面是Docker的日志文件
查看同级目录下的所有-json.log
du -ha /home/docker/containers/ | grep "json.log" | sort -rh
volumes目录
进入volumes目录中,查看大小
du -sh *
进入某个volume,查看其中内容,发现是数据卷内容,可以看情况清理
overlayer2目录
查看其中目录占用空间大小
发现其中部分目录占用空间较大,进入里面看看都由哪些东西
merged 和 diff 占磁盘空间比较大,work 目录可以不用管。
这两个文件夹内容开始是一样的 ,merged会多一些由容器本身产出的写文件,进merged继续往下找
进入./csp目录,发现其中有很多的日志文件
我这里是sentinel的日志,个人项目视情况是否删除,或者通过配置限制文件个数和大小。
3、解决方法
1、docker 镜像占用磁盘
Docker 中查询磁盘占用情况命令: docker system df
可通过执行docker system prune 命令可用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)
【慎用】 docker system prune -a 命令清理更干净、彻底,可以将没有容器使用的Docker镜像都删掉。
2、containers目录
Docker 容器的日志文件可能会增长并占用大量的磁盘空间。可以检查并删除不再需要的容器日志文件。
(1)临时方案:这个命令将删除 /home/docker/containers/ 目录下的容器日志文件。
sudo find /home/docker/containers/ -name "*-json.log" -type f -delete
(2)稳定方案:设置容器服务的日志大小上线
方式一:每个容器都可以单独设置
logging:
driver: "json-file"
options:
max-size: "256m"
max-file: "3"
方式二:全局设置
方式三:contab定时执行清理脚本
echo "======== start clean docker containers logs ========"
logs=$(find /home/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 ========"
3、volumes目录
可通过命令删除
find /var/lib/docker/volumes -type f -name "*.log" -delete
3、overlayer2目录
通过排查overlayer2下merged目录中的占用空间较大的目录排查是否需要删除
版权归原作者 weixin_44012070 所有, 如有侵权,请联系我们删除。