Docker 日志太多?磁盘爆了?一篇教你搞定容器日志问题

今天分享一下如何处理Docker日志的问题。

一、Docker日志好坑

Docker 默认使用的是 json-file 日志驱动。日志会一直写,一直写,一直写……没有限制、没有轮转、没有清理!

日志默认位置:

复制
/var/lib/docker/containers/<container-id>/<container-id>-json.log1.

当你发现它时,可能已经:

占了几十个 G吃满了磁盘服务都挂了!

二、如何处理日志问题

主要通过日志轮询方式处理。下面介绍三种方式设置日志轮询

1. 运行容器时设置轮转策略(推荐)
复制
docker run -d \ --name myapp \ --log-driver json-file \ --log-opt max-size=10m \ --log-opt max-file=3 \ myapp:latest1.2.3.4.5.6.

参数解释:

max-size=10m:单个日志文件最大 10MBmax-file=3:最多保留 3 个轮转文件(最多 30MB)

容器总日志控制在 30MB 内,绝不爆炸!

2. 修改 Docker 配置

该配置适用于所有容器。

编辑配置文件 /etc/docker/daemon.json:

复制
{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "5" } }1.2.3.4.5.6.7.

重启 Docker 服务:

复制
systemctl restart docker1.

注意:只对之后创建的容器生效!

3. 正在运行的容器

你可以这样快速清理日志(生产环境慎用!):

复制
echo "" > $(docker inspect --format={{.LogPath}} <container-id>)1.

或者更稳一点:

docker stop 停掉容器docker rm 删除容器使用轮转参数重新 run容器4. 禁用日志输出

这个操作慎用,有可能影响应用运行,而且不方便后续排查

复制
docker run --log-driver=none 容器名1.
5. 日志快速清理

仅推荐在磁盘告急时临时使用!

复制
find /var/lib/docker/containers -name *-json.log -exec truncate -s 0 {} \;1.

三、实战建议

根据不同场景推荐配置值。

场景

建议参数

开发环境

max-size=5mmax-file=3

测试环境

max-size=10mmax-file=5

生产环境

max-size=50mmax-file=10

Docker 日志默认设置太坑,一定要手动配置!

最佳实践:

用 json-file + max-size + max-file修改 daemon.json 设置全局默认老容器要么清理日志,要么重启带轮转参数

阅读剩余
THE END