Docker 容器磁盘占用100%

目前生产环境使用的docker+微服务的环境,配合自动化编译部署环境,大大减少了,项目测试或上线的复杂度,让运维变得了快乐起来,可是在服务运行的一段时间后,某些主机磁盘空间被占满了(项目本身对磁盘要求不高,因此默认使用的是40G磁盘空间的云服务器),于是又进入了漫长的踩坑之路

首先查看磁盘占用

df -h

结果显示多条如下数据

overlay  40G   40G  0G  100% /var/lib/docker/overlay2/{id}/merged

百度到了清理docker空间的方法,可用于清理一些无用的docker数据

docker system prune -a

执行之后,发现虽然清理了2个多G的数据,但是依旧无法明白为何几个微服务会占用那么多的磁盘空间,于是尝试查找系统中的大文件

 find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr # 查找"/"目录下所有大于100M的所有文件

发现/var/lib/docker/containers/{container_id}/下存在数据较大的*-json.log日志文件,百度发现这是docker容器运行的标准输入日志,遂删除之。项目中已使用-v的方式挂载项目输出日志文件,因此对容器运行日志没有了需求,研究后发现在构建参数的时候可以对标准输入日志大小数量进行限制,以减少日志文件对存储空间的占用,以下配置分别为日志文件最大容量、最大日志文件数。

docker run ...... --log-opt max-size=10m --log-opt max-file=1

也可以在docker的配置文件中进行全局修改:新建或修改/etc/docker/daemon.json,添加log-dirver和log-opts参数(daemon.json参数说明:https://www.cnblogs.com/pzk7788/p/10180197.html

{
   "log-driver":"json-file",
   "log-opts": {"max-size":"10m", "max-file":"1"}
}

另外,在查找大文件的扫描结果中,可能有通过-v进行了挂载数据目录的,里面的数据可根据相应的挂载目录找到对应的容器进行清理或设置;也可能有出现许多容器产生的未通过-v挂载的目录/var/lib/docker/overlay2/{id}/merged,即文章开头通过df -h找到的文件(如果一个宿主机存在多个容器,多个容器的数据都位于宿主机的overlay(Filesystem),而且大小一致),可通过docker inspect {container}GraphDriver找到}/var/lib/docker/overlay2/{id}中的{id},进而确定容器进行清理或设置

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 摘要:用了 Docker,好处挺多的,但是有一个不大不小的问题,它会一不小心占用太多磁盘,这就意味着我们必须及时清...
    SevenLonely阅读 3,529评论 0 0
  • 摘要:用户在使用 Docker 部署业务一段时间后,可能会发现宿主节点的磁盘容量持续增长,甚至将磁盘空间耗尽进而引...
    暖夏未眠丶阅读 6,433评论 0 1
  • 明天将迎来儿子初中阶段第一次重要的考试--元调。这周学校取消了早晚自习,小家伙很高兴,今天更加高兴。我到家前他已经...
    黄淑琴阅读 3,388评论 6 14
  • 今晚和一位同事夜爬紫金山,感觉和早上爬果然不一样。看到的风景,过程中的感觉都变了。 由于这次是和一个善于爬山的小哥...
    耕吧阅读 1,571评论 0 0
  • 在道德规则和内心意识里挣扎实在是太痛苦了。 那些所谓的道德规则真的就是真理吗!!哎,放弃吧!不要挣扎了!哎。
    吴沁林阅读 1,247评论 0 0

友情链接更多精彩内容