更多文章:WorkMap技术博客
双重日志
Docker Engine 19.03以及以前的版本,docker logs 命令仅适用于本地、json-file 和 journald 日志记录驱动程序。
Docker 20.10 及更高版本引入了“双重日志记录”,它使用本地缓冲区,可以对任何日志记录驱动程序使用 docker logs 命令。
关闭双重日志
- 修改Docker daemon配置
cat /etc/docker/daemon.json { "log-driver": "splunk", "log-opts": { "cache-disabled": "true", ... (options for "splunk" logging driver) } }
- 启动容器
docker run -d busybox --name testlog top
- 执行docker logs命令读取日志(报错)
docker logs 7d6ac83a89a0 Error response from daemon: configured logging driver does not support reading
双重日志参数
-
cache-disabled 默认为"false"
禁用本地缓存。布尔值作为字符串传递(true,1,0或false)。
-
cache-max-size 默认值:“20m”
缓存的最大大小(轮换之前)。正整数加上单位(k,m或g)。
-
cache-max-file 默认值:“5”
缓存文件的最大数量。如果轮换日志产生多余的文件,则删除最老的文件。
-
cache-compress 默认值:“true”
启用或禁用轮换日志文件的压缩。布尔值作为字符串传递(true,1,0或false)。
使用第三方日志驱动
Docker 日志插件允许您扩展和定制 Docker 的日志功能,超出内置日志驱动程序的范围。
日志服务提供商可以实现自己的插件,并在 Docker Hub 或私有注册表上提供它们。
- 安装日志驱动程序插件
docker plugin install <org/image>
- 列出所有安装的插件
docker plugin ls
- 将插件配置为默认日志驱动程序
修改daemon.json{ "log-driver": "myplugin", "log-opts": { } }
- 将容器配置使用自定义日志驱动
docker run -it --log-driver myplugin alpine ash
自定义日志tag
tag可使用的参数
-
{{.ID}}
容器ID的前12个字符。
-
{{.FullID}}
完整的容器ID。
-
{{.Name}}
容器名称。
-
{{.ImageID}}
容器镜像ID的前12个字符。
-
{{.ImageFullID}}
容器镜像的完整ID。
-
{{.ImageName}}
容器镜像名。
-
{{.DaemonName}}
Docker程序的名称(docker)。
示例
指定–log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}"值会产生类似syslog日志行的输出:
Aug 7 18:33:19 HOSTNAME hello-world/foobar/5790672ab6a0[9103]: Hello from Docker.