Docker容器磁盘占⽤100%(varlibdockeroverlay2空间占⽤很⼤--转载
项⽬本⾝对磁盘要求不⾼,因此默认使⽤的是40G磁盘空间的云服务器),于是⼜进⼊了漫长的踩坑之路
⾸先查看磁盘占⽤
df -h
结果显⽰多条如下数据
overlay 40G 40G 0G 100% /var/lib/docker/overlay2/{id}/merged
百度到了清理docker空间的⽅法,可⽤于清理⼀些⽆⽤的docker数据
docker system prune -a
执⾏之后,发现虽然清理了2个多G的数据,但是依旧⽆法明⽩为何⼏个微服务会占⽤那么多的磁盘空间,于是尝试查系统中的⼤⽂件
container容器用法find / -type f -size +100M -print0 | xargs -0 du -h | sort -nr # 查"/"⽬录下所有⼤于100M的所有⽂件
发现/var/lib/docker/containers/{container_id}/下存在数据较⼤的*-json.log⽇志⽂件,百度发现这是docker容器运⾏的标准输⼊⽇志,遂删除之。项⽬中已使⽤-v的⽅式挂载项⽬输出⽇志⽂件,因此对容器运⾏⽇志没有了需求,研究后发现在构建参数的时候可以对标准输⼊⽇志⼤⼩与数量进⾏限制,以减少⽇志⽂件对存储空间的占⽤,以下配置分别为⽇志⽂件最⼤容量、最⼤⽇志⽂件数。
{
"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},进⽽确定容器进⾏清理或设置