docker日志膨胀问题
- docker
- 8天前
- 23热度
- 0评论
一、问题出现
Docker 已成为开发者的常用工具,但在高负载和高并发的环境下,Docker 容器生成的日志文件可能会迅速膨胀,占用大量磁盘空间,甚至导致系统性能问题。本文将探讨如何有效地管理和减少 Docker 日志的大小,确保日志的高效存储和易于管理。
Docker 默认使用 json-file 日志驱动来记录容器的标准输出和标准错误输出。这些日志通常会存储在 /var/lib/docker/containers/[container-id]/ 路径下,文件名为 container-id-json.log。
随着容器的运行,日志文件会不断增长,甚至变得庞大无比。
二、容器日志清理方案
- 方案一:手动清理日志文件,可解燃眉之急,治标不治本。
- 方案二:脚本定期清理日志文件,缺点是日志文件全丢了,无法追溯。
- 方案三:限制所有容器的日志文件大小,治本,缺点是需要重新创建容器和启动 docker 镜像。
方案一:手动清理方案
echo > /var/lib/docker/containers/容器id/容器id-json.log
方案二:脚本定期清理
#!/bin/sh
logs=$(find /var/lib/docker/containers/ -name *-json.log)
for log in $logs
do
echo "clean logs : $log"
echo > $log
done
把执行脚本的命令加到 Linux 的定时任务crontab
中就可以了
方案三:限制 Docker 容器日志大小
修改/etc/docker/daemon.json配置文件,填写下面的配置
{
"log-driver":"json-file",
"log-opts": {"max-size":"500m", "max-file":"3"}
}
max-size=500m,表示容器的日志文件大小上限是 500MB, max-file=3,表示容器有三个日志,第一个满了 500MB之后就写第二个,第二个满了 500MB就写第三个,如果第三个满了,就清空第一个日志文件,重新写第一个日志文件,循环模式。
改完之后需要重启 docker 守护进程
systemctl daemon-reload
systemctl restart docker
注意:
这种方式只对新建的容器有效的,之前的容器不生效。