问题呈现
最近生产环境应用 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/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f 1.1G /var/lib/docker/overlay2/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f/diff 0 /var/lib/docker/overlay2/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f/work 1.7G /var/lib/docker/overlay2/c9934ca80d32e8c8a6108bbe914258ed41f17b87f751d3ed5811a38bf8535a8f/merged 2.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 做了卷映射,疏忽了其余的日志,所以造成了这个问题。
记录一下,也给有类似问题的同学一些启发。