1

问题出现

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

​ 但是后来不厌其烦了,基本上每周都要清理一次,毕竟也不是专业运维,所以还是找了时间仔细看了下。

解决过程

​ 正常使用命令查看磁盘占用情况

du -h --max-depth=1 /

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

  • /var/lib/docker/containers

    image-20210121152655415

    挑比较大的目录继续

    ls -lht

image-20210121153020721

发现占用空间的其实就是一个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

image-20210121154234461

image-20210121154315839

并且在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做了卷映射,忽略了其他的日志,所以造成了这个问题。

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


朱世伟
7 声望7 粉丝