关于docker:docker磁盘占用过大问题

68次阅读

共计 1470 个字符,预计需要花费 4 分钟才能阅读完成。

问题呈现

​ 最近生产环境应用 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 做了卷映射,疏忽了其余的日志,所以造成了这个问题。

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

正文完
 0