Docker日志不清理,磁盘迟早爆。跑几个容器,默认的json-file驱动会把stdout和stderr全部存到/var/lib/docker/containers/下,每个容器一个目录,里面有个`容器ID-json.log`,时间长了就是几十GB。
## 日志存在哪
默认路径:
/var/lib/docker/containers/<容器ID>/<容器ID>-json.log
直接查看大小:
du -sh /var/lib/docker/containers/*/*-json.log
或者用docker inspect查某个容器的日志配置:
docker inspect --format='{{.LogPath}}' 容器名
## 临时清理
不想重启容器,直接清空日志文件。注意别用`rm`,要用`truncate`,因为容器还在写这个文件句柄,删了文件不释放空间,得重启docker daemon才释放。
truncate -s 0 /var/lib/docker/containers/*/*-json.log
更精准的,清指定容器:
truncate -s 0 $(docker inspect --format='{{.LogPath}}' 容器名)
## 限制日志大小
跑容器的时候就设好限制,别等炸了再清。
启动时加参数:
docker run -d --log-opt max-size=10m --log-opt max-file=3 nginx
– `max-size=10m`:每个日志文件最大10MB
– `max-file=3`:保留3个文件,轮转
效果是:日志超10MB就切新文件,最多3个,老的自动删。
## 全局配置
每个容器都加参数太蠢,直接改docker daemon配置。
编辑`/etc/docker/daemon.json`,没有就新建:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
重启docker:
systemctl restart docker
注意:改完只对新容器生效,已经在跑的容器不受影响。想改已有容器,只能删了重建。
## 换日志驱动
json-file性能一般,日志量大的场景可以换`journald`或`local`驱动。
local驱动性能更好,自带轮转:
{
"log-driver": "local",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
journald驱动把日志交给systemd-journald管理:
{
"log-driver": "journald"
}
journald日志用`journalctl`查:
journalctl -u docker CONTAINER_NAME=容器名
## 定时清理脚本
生产环境上,写个cron定时清日志。注意别清正在写入的,用logrotate最稳。
安装logrotate,配置docker日志轮转:
cat > /etc/logrotate.d/docker <<EOF
/var/lib/docker/containers/*/*-json.log {
rotate 7
daily
compress
size 10M
missingok
delaycompress
copytruncate
}
EOF
– `copytruncate`:关键参数,先拷贝再截断,不影响容器写文件句柄
– `rotate 7`:保留7个历史日志
– `daily`:每天轮转一次
– `size 10M`:超过10M就轮转
测试配置:
logrotate -d /etc/logrotate.d/docker
## 清理容器日志的坑
1. 别用`docker logs –follow`长时间挂着,会占用文件句柄,影响logrotate
2. 日志驱动改成`none`可以彻底不写日志,但排查问题就瞎了
3. 有些镜像自己写日志到容器内文件(比如访问日志),那不在json.log里,得挂载volume出来单独处理
4. 用`docker system prune`只清理悬空镜像和停止容器,不清理日志文件
## 实际案例
我有个雨云服务器,跑几个业务容器,默认配置没改,半年后磁盘报警。查了下日志目录占了40GB,大部分是nginx和java应用的stdout日志。当时用的truncate紧急清理,改了daemon.json全局限制10m/3file,再配了logrotate兜底。现在磁盘一直稳定在60%以下。雨云的机器性价比不错,稳定用了两年没出过问题,就是日志这块得自己管好。
:日志清理是运维基本功,别等磁盘满了再救火。配好限制和轮转,一劳永逸。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容