Docker 重度使用者们,您了解过 Docker 日志吗?如何查找、减少以及管理日志,从而有效节省磁盘空间!今天分享一下如何处理 Docker 日志的问题。
日志好坑
Docker 默认使用的是 json-file 日志驱动。日志会一直写,没有限制、没有轮转、没有清理!日志默认位置:
1 | /var/lib/docker/containers/<container-id>/<container-id>-json.log |
当您发现它时,可能已经:
1 | IO 等待时间长 |
处理问题
主要通过日志轮询方式处理,下面介绍两种方式设置日志轮询。在运行容器时设置轮转策略:
1 | docker run -d \ |
参数解释:
| 参数 | 解释 |
|---|---|
| max-size=10m | 单日志文件最大 10MB |
| max-file=3 | 最多保留 3 个轮转文件,容器总日志控制在 30MB 内 |
修改 Docker 的配置,该配置适用于所有容器,编辑 Docker 配置文件/etc/docker/daemon.json:
1 | { |
重启下 Docker 服务,注意只对之后创建的容器生效!
1 | systemctl restart docker |
日志清理
正运行的容器,可以这样快速清理日志「生产环境慎用」
1 | echo "" > $(docker inspect --format='{{.LogPath}}' <container-id>) |
或者更稳一点:
| 命令 | 解释 |
|---|---|
| docker stop | 停掉容器 |
| docker rm | 删除容器 |
禁用日志输出,这个操作慎用,有可能到影响应用运行,而且不方便后续的排查:
1 | docker run --log-driver=none <container-id> |
日志快速清理,仅推荐在磁盘告急临时使用:
1 | find /var/lib/docker/containers -name *-json.log -exec truncate -s 0 {} \; |
实战建议
根据不同的场景推荐配置值:
| 场景 | 配置值一 | 配置值二 |
|---|---|---|
| 开发环境 | max-size=5m | max-file=3 |
| 测试环境 | max-size=10m | max-file=5 |
| 生产环境 | max-size=50m | max-file=10 |
最佳实践:
1 | 用 json-file+max-size+max-file |