解决Docker日志文件占用磁盘过大的问题

解决Docker日志文件占用磁盘过大的问题

  初次使用docker并尝试搭建邮件服务,过了一段时间发现磁盘空间不足,通过df -h指令发现 /var/lib/docker/overlay2/{id}/merged 这个目录占了近20g空间,发现了是日志文件没作出限制记录了19g,网上搜索了一番才找出解决方法。 仅清理的办法 找出日志文件的脚

  初次使用docker并尝试搭建邮件服务,过了一段时间发现磁盘空间不足,通过df -h指令发现 /var/lib/docker/overlay2/{id}/merged 这个目录占了近20g空间,发现了是日志文件没作出限制记录了19g,网上搜索了一番才找出解决方法。

仅清理的办法

  • 找出日志文件的脚本
    在root文件下创建一个名为 docker_log_size.sh 的文件并编辑输入以下内容
#!/bin/sh 
echo "======== docker containers logs file size ========"  

logs=$(find /var/lib/docker/containers/ -name *-json.log)  

for log in $logs  
        do  
             ls -lh $log   
        done
  • 给脚本赋权并运行
chmod +x docker_log_size.sh 
./docker_log_size.sh 
  • 清理日志文件的脚本
    在root文件下创建一个名为 docker_log_log.sh 的文件并编辑输入以下内容
#!/bin/sh 
echo "======== start clean docker containers logs ========"  

logs=$(find /var/lib/docker/containers/ -name *-json.log)  

for log in $logs  
        do  
                echo "clean logs : $log"  
                cat /dev/null > $log  
        done  

echo "======== end clean docker containers logs ========"
  • 给脚本赋权并运行
chmod +x clean_docker_log.sh 
./clean_docker_log.sh 

永久解决的方法

  • 全局设置
  • 新建/etc/docker/daemon.json,若有就不用新建了。添加log-dirver和log-opts参数,样例如下:
# vim /etc/docker/daemon.json  
{
  "insecure-registries" : [
    "registry.docker-cn.com",
    "docker.mirrors.ustc.edu.cn"
  ],
  "debug" : true,
  "experimental" : true,
  "storage-driver": "overlay2"
}
{
    "log-driver":"json-file",
    "log-opts":{
        "max-size" :"50m","max-file":"1"
    }
}   

max-size=500m,意味着一个容器日志大小上限是500M,

max-file=3,意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。

  • 重启docker守护进程
systemctl daemon-reload 
systemctl restart docker 

至此日志文件将会减小,注意切勿手动删除,手动删除会遇到文件删除了但空间并未减小的问题。

LICENSED UNDER CC BY-NC-SA 4.0
Comment