docker日志问题导致磁盘空间被占用
docker日志问题导致磁盘空间不足
昨天突然发现本厂开发环境各个docker实例都处于非健康状态,在宿主机上执行命令:
df -h
发现docker相关的文件占用空间是100%:
有点不正常,我看看docker相关的文件占用情况,是镜像占用的还是容器占用的,或者是Volumes占用的,执行:
docker system df
这里面显示一切正常,也并没有超过挂载盘的大小256G。
首先把多余的镜像和不用的docker都清理掉。
执行命令:
docker system prune -a
可以将没有容器使用Docker镜像和未开启的容器都删掉。
我看到占用超过226G空间的都来自 /mnt/docker/overlay2/*
这个目录,
进入到这个目录,并执行:
du -lbhs ./*
发现这里面也没有超过2个G的目录文件大小。
我潜意识里就觉得八成是日志导致的,所以我首先看看是不是我所有的docker输出的日志文件是否需要清理了,我到挂载目录里去看看,果然发现了很多docker容器的日志目录就占了1-2个G,我du -lbhs 了一下,发现所有容器挂载的日志目录加起来的容量才8G多点,不足以占用256个G的空间。
算了,先把这8个G的占用清了吧。
rm -rf ./*/logs/*
然后我再看看docker容器本身还有多少占用的空间情况:
docker ps --size
发现还有两个docker占用了3个多占的空间,但是又不知道具体是什么导致的,那我只能看看docker本身的硬盘占用情况了:
docker diff <container>
发现/tmp
目录下有好多文件:
还有指向/tmp/tomcat.*/*
相关的目录:
我觉得八成就是这些东西占用的,/tmp 临时文件按道理讲系统会自动删除的,不知道为什么没有删除,这个后面再找原因。
我就把所有docker容器里的/tmp
目录下的文件全部删除,反正是临时文件。
docker exec <container> rm -rf /tmp/*
好,都删除了,再看一下硬盘空间,发现还是已使用100%。
怎么办,有点慌了,我看这个指向的还是overlay2目录,我尝试着在目录里找找问题。
我想,这个overlay2目录可能有挂载或者链接,它自身并不大,是挂载的目录占用大。
我们往上一级再看看哪个文件占用空间大:
cd ..
du -lbhs ./*
发现有几个contarins目录下的目录文件占用挻大的:
我就从最大的目录下手,占用空间7.4G的,是8972f…..这个目录,我进去看一眼:
我发现里面有个后缀为xxxx-json.log
的这个文件占了198G,这个就是问题了,很兴奋,赶紧删除了:
rm -rf ./*/*.log
这个就把所有的contarner的控制台日志文件删除了。
我们再看看docker的空间占用情况:
这里已经很好了,只有镜像占用了1个多G。
我们再来看看宿主机的空间情况:
df -h
发现还是100%,见鬼了:
一般觉得见鬼了的时候,只有两种情况,一种是你操作错了别的东西,一种是缓存,我觉得是后者。
我觉得肯定是docker还没有读到真实的容器占用硬盘空间的数据,那我只能重启docker了:
systemctl daemon-reload
systemctl restart docker
为了确认一切顺利,运行:
docker info
ok,没有问题了,再执行 df -h
很好:
已经只占用挂载磁盘 /dev/vdbd1
总大小的2%。
看来后面还是要写一个自动删除日志的脚本,来维持硬盘空间的大小。