Docker定期清除容器日志
Docker定期清除容器日志
博客系统通过Docker部署,在生产环境下半年后的今天,居然把服务器硬盘给占满了,心里琢磨着,我Minio也没存啥大文件啊,开始定位,最后发现硬盘空间被Docker日志给嚯嚯没了,于是有了这篇文章。
脚本定时清空日志文件
按照占用空间大小升序现实日志文件夹:
sudo du -d1 -h /var/lib/docker/containers | sort -h
clear_docker_logs.sh
#!/bin/bash
# 检查日志目录是否存在
LOG_DIR="/xxx"
if [ ! -d "$LOG_DIR" ]; then
echo "日志目录不存在: $LOG_DIR"
exit 1
fi
# 查找并清空所有Docker容器的日志文件
find /var/lib/docker/containers/ -type f -name "*.log" -exec truncate -s 0 {} \;
# 检查清理日志操作是否成功
if [ $? -eq 0 ]; then
echo "清除Docker日志文件于 $(date)" >> "$LOG_DIR/clear_docker_logs.log"
else
echo "清理Docker日志文件失败于 $(date)" >> "$LOG_DIR/clear_docker_logs.log"
fi
/xxx
替换为你存放脚本的目录,或者
#!/bin/bash
echo "========= start clean docker containers logs ==========="
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "清理docker日志文件: $log"
cat /dev/null > $log
done
echo "========= end clean docker containers logs ==========="
使用cron作业
打开crontab编辑器
crontab -e
在crontab文件中添加以下行
0 2 * * * /xxx/xxx/clear_docker_logs.sh
0 2 * * *
cron表达式自己替换
确保脚本有执行权限
chmod +x /xxx/xxx/clear_docker_logs.sh
这样设置完成后,脚本将会按预定时间自动运行。
全局容器日志大小
vim /etc/docker/daemon.json
添加如下配置
{
"log-driver":"json-file",
"log-opts":{
"max-size" :"50m",
"max-file":"3"
}
}
说明:
max-size=50m
意味着一个容器日志大小上限是50M
max-file=3
意味着一个容器有三个日志,分别是id+.json、id+1.json、id+2.json。可以存在的最大日志文件数。如果超过最大值,则会删除最旧的文件。“仅在max-size设置时有效”,默认为5。
重载配置,重启docker
systemctl daemon-reload
systemctl restart docker
注意事项
修改配置后重启docker只对新建的容器有效,对已存在的容器不会有影响,需要重建才可生效。
修改日志驱动
docker 的日志驱动有很多种,以下是官网给的列表:
详情见docker doc
通过以下命令查看当前默认配置的日志驱动
docker info --format '{{.LoggingDriver}}'
修改配置文件
vim /etc/docker/daemon.json
添加如下配置
{
"log-driver": "local"
}
重载配置,重启docker
systemctl daemon-reload
systemctl restart docker
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 孤寂灬无痕
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果