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容器之后生效。