0. 概述
查看日志应该大家都很清楚可以用 docker log 了,但是,这些日志被放在哪里?Docker 又是如何处理这些日志的不知道你是否清楚?本文将介绍一下 Docker 关于日志的一些内容。
1. 日志存放在哪
- Docker 容器的日志
/var/lib/docker/containers/<container id>/<container id>-json.log
- Docker Daemon 的日志
journalctl -fu docker.service
2. 日志如何管理
Docker 的日志提供的是驱动式的管理,支持多种不同的日志管理模型,默认的是 json 文件的模式,可以这么看:
[root@liqiang.io]# docker info | grep Log
Logging Driver: json-file
图 1:所有支持的 Logger 驱动 |
3. 日志怎么清除
如果使用的是 json 日志格式的话,Docker 支持很多选项:
图 2:json-log 支持的选项 |
可以通过设置这些选项来达到控制日志清除的效果。
4. 配置日志
在目录 /etc/docker
下创建 daemon.json
(默认情况下是没有的),然后写入配置即可:
[root@liqiang.io]# cat > /etc/docker/daemon.json <<EOF
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3",
"labels": "production_status",
"env": "os,customer"
}
}
EOF
[opts] 问题定位
配置不生效怎么办?
修改了配置之后,容器的日志还是很大,通过 docker inspect
分析发现配置是没有生效的:
[root@liqiang.io]# sh -c "du -ch /var/lib/docker/containers/*/*-json.log"
422M /var/lib/docker/containers/xxxxxxx/xxxxxxxxxxxx-json.log
7.9G /var/lib/docker/containers/yyyyyyy/yyyyyyyyyyyyy-json.log
8.3G total
[root@liqiang.io]# docker inspect xxxxxx | jq .[].HostConfig.LogConfig
{
"Type": "json-file",
"Config": {}
}
然后找了一圈,发现这是个 issue:Docker log rotation is not working the container log keeps on growing,然后解决方式是要把容器杀掉(不是 restart,restart 不会生效)重建才行。
[root@liqiang.io]# docker inspect xxxxxxxx | jq .[].HostConfig.LogConfig
{
"Type": "json-file",
"Config": {
"env": "os,customer",
"labels": "production_status",
"max-file": "3",
"max-size": "10m"
}
}