0. 概述

查看日志应该大家都很清楚可以用 docker log 了,但是,这些日志被放在哪里?Docker 又是如何处理这些日志的不知道你是否清楚?本文将介绍一下 Docker 关于日志的一些内容。

1. 日志存放在哪

2. 日志如何管理

Docker 的日志提供的是驱动式的管理,支持多种不同的日志管理模型,默认的是 json 文件的模式,可以这么看:

  1. [root@liqiang.io]# docker info | grep Log
  2. Logging Driver: json-file
图 1:所有支持的 Logger 驱动

3. 日志怎么清除

如果使用的是 json 日志格式的话,Docker 支持很多选项:

图 2:json-log 支持的选项

可以通过设置这些选项来达到控制日志清除的效果。

4. 配置日志

在目录 /etc/docker 下创建 daemon.json(默认情况下是没有的),然后写入配置即可:

  1. [root@liqiang.io]# cat > /etc/docker/daemon.json <<EOF
  2. {
  3. "log-driver": "json-file",
  4. "log-opts": {
  5. "max-size": "10m",
  6. "max-file": "3",
  7. "labels": "production_status",
  8. "env": "os,customer"
  9. }
  10. }
  11. EOF

[opts] 问题定位

配置不生效怎么办?

修改了配置之后,容器的日志还是很大,通过 docker inspect 分析发现配置是没有生效的:

  1. [root@liqiang.io]# sh -c "du -ch /var/lib/docker/containers/*/*-json.log"
  2. 422M /var/lib/docker/containers/xxxxxxx/xxxxxxxxxxxx-json.log
  3. 7.9G /var/lib/docker/containers/yyyyyyy/yyyyyyyyyyyyy-json.log
  4. 8.3G total
  5. [root@liqiang.io]# docker inspect xxxxxx | jq .[].HostConfig.LogConfig
  6. {
  7. "Type": "json-file",
  8. "Config": {}
  9. }

然后找了一圈,发现这是个 issue:Docker log rotation is not working the container log keeps on growing,然后解决方式是要把容器杀掉(不是 restart,restart 不会生效)重建才行。

  1. [root@liqiang.io]# docker inspect xxxxxxxx | jq .[].HostConfig.LogConfig
  2. {
  3. "Type": "json-file",
  4. "Config": {
  5. "env": "os,customer",
  6. "labels": "production_status",
  7. "max-file": "3",
  8. "max-size": "10m"
  9. }
  10. }

5. Ref