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.
仅推荐在磁盘告急时临时使用!
复制
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