问题呈现

最近生产环境应用docker容器的机器显著硬盘增长过快,监控飘红。起初并不在意,因为这几台机器是老机器,初始磁盘空间自身不大,失常状况下也是须要隔段时间清理。

然而起初不厌其烦了,基本上每周都要清理一次,毕竟也不是业余运维,所以还是找了工夫认真看了下。

解决过程

失常应用命令查看磁盘占用状况

du -h --max-depth=1 /

筛选过后发现目录 /var/lib/docker/containers 和 /var/lib/docker/overlay2下占用了大量空间,网络上也搜寻了,大部分是让执行docker清理命令,基本不论用。

  • /var/lib/docker/containers

    挑比拟大的目录持续

    ls -lht

发现占用空间的其实就是一个log文件,搜寻了一下解决方案:

cat /dev/null > *-json.log

有条件重启下,不重启也OK。

  • /var/lib/docker/overlay2

    同样进入占用空间较大的目录,最终发现该目录下占用空间较大的都为rocketmq客户端的日志

    du -h --max-depth=1 /var/lib/docker/overlay2/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f1.1G    /var/lib/docker/overlay2/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f/diff0       /var/lib/docker/overlay2/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f/work1.7G    /var/lib/docker/overlay2/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f/merged2.8G    /var/lib/docker/overlay2/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f

并且在diff和merged目录下都存在一份。持续摸索:

overlay2目录是docker的分层存储目录,保留理论分层内容。创立容器实现之后,在镜像存储目录/var/lib/Docker/overlay2/会生成容器的初始层和读写层,两者应用雷同标识,初始层前面多了-init。初始层中次要保留初始化容器环境时,与容器相干的环境信息,如容器主机名,主机host信息以及域名服务文件等;读写层用于容器的读写,Docker容器内的过程只对读写层领有写权限,而对其余层文件内容只领有读权限

应用rocketmq后,默认会在{user.home}\logs\rocketmqlogs 目录下生成大量的mq跟踪日志

随即我抉择一个rocketmq的客户端利用进入容器:

docker exec -it xx bash

我找了根目录下log目录没有,搜寻下

find -name rocketmq_client.log./root/logs/rocketmqlogs/rocketmq_client.log

最终在root上面logs目录找到了。。。才反馈过去用户是root。。

docker启动时我只对/logs做了卷映射,疏忽了其余的日志,所以造成了这个问题。

记录一下,也给有类似问题的同学一些启发。