问题出现
最近生产环境使用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做了卷映射,忽略了其他的日志,所以造成了这个问题。
记录一下,也给有相似问题的同学一些启发。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。