Docker 日志清理

2,810 阅读1分钟

1、问题

测试环境服务器空间有限,用过一段时间后发现新的版本无法部署上去,经过df -lh排查发现是服务器空间满了,但是应用日志大小已经配置了大小限制,循环打印;想到应该是docker容器日志打印太多导致,docker logs -f container_name查看发现容器唰唰唰的打印了一大堆日志,找到问题所在,接下来就是处理。

2、解决方法

容器日志在linux一般存放地址:/var/lib/docker/containers/container_id/

处理之前可先查看各个日志文件大小,脚本docker_log_size.sh,内容如下:

#!/bin/shecho "========
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

清理Docker容器日志

如果docker容器正在运行,那么使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。rm -rf删除后重启docker再看查看会发现空间已经释放了,也可以把日志清理整理出脚本需要的时候执行一下,docker_log_delete.sh脚本内容:

#!/bin/sh 
echo "======== start clean 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 logs ========"  

 使用以上脚本清理之后,过段时间日志又会满了,还需要再次清理,为了避免这种情况可以给docker设置日志上限限制。
  • 设置Docker容器日志大小
 在docker-compose文件 给指定服务设置容器日志大小:

rocketmq:  image: rocketmqinc/rocketmq:4.4.0  restart: always  logging:     driver: "json-file"    options:       max-size: "200M"

重启namesrv容器之后生效。