Docker logs

运行 httpd 容器:

[root@localhost ~]# docker run   -p 80:80 httpd

因为我们在启动的时候没有用-d参数,所以httpd 容器以前台方式启动,日志会直接输出在终端上。

在后台运行:

[root@localhost ~]# docker run  -dit -p 80:80 httpd

这种情况要想查看容器的日志,可以用 attach

[root@localhost ~]# docker attach   ID

或者用docker logs命令查看日志

[root@localhost ~]# docker logs  -f  ID

Docker Logging Driver

将容器日志发送到 STDOUT 和 STDERR 是 Docker 的默认行为,Docker 提供了多种日志机制帮助用户从运行的容器中提取日志信息,这些机制被称为 logging driver。

Docker的默认 logging driver是 json-file

[root@localhost ~]# docker info | grep 'Logging Driver'
Logging Driver: json-file

如果容器在启动时没有特别指明,就会使用这个默认的 logging driver。
json-file 会将容器的日志保存在.json文件中,日志路径为 /var/lib/dockercontainer/ID/ID.json.log

[root@localhost ~]# docker container inspect 5cbb8ec32abc | grep LogPath
        "LogPath": "/var/lib/docker/containers/5cbb8ec32abc4ac1b3fab4a3e5f3c0bf1fd951892bacc5d7e524e8fa3c0e37a1/5cbb8ec32abc4ac1b3fab4a3e5f3c0bf1fd951892bacc5d7e524e8fa3c0e37a1-json.log",

除了 json-file 还支持很多 logging driver

驱动程序描述
none容器没有日志可用,docker logs 什么都不返回
local日志以自定义格式存储,设计这种格式的目的是将开销降到最低。
syslog将日志消息写入 syslog 工具,syslog 守护程序必须在主机上运行。
journald将日志消息写入 journald,journald 守护程序必须在主机上运行。
gelf将日志消息写入 Graylog Extended Log Format (GELF) 终端,例如 Graylog 或 Logstash。
fluentd将日志消息写入 fluentd(forward input),fluentd 守护程序必须在主机上运行。
awslogs将日志消息写入 Amazon CloudWatch Logs。
splunk使用HTTP事件收集器将日志消息写入splunk。
etwlogs将日志消息写为 Windows 的 Event Tracing 事件,仅在Windows平台上可用。
gcplogs将日志消息写入 Google Cloud Platform (GCP) Logging。
logentries将日志消息写入 Rapid7 Logentries。
json-file日志格式化为 JSON,这是 Docker 默认的日志驱动程序。
  • none 是 disable 容器日志功能
  • syslog 和 journald 是linux上的两种日志管理服务
  • awslogs,splunk 和 gcplogs 是第三方日志托管服务
  • gelf 和 fluentd 是两种开源的日志管理方案

容器启动时可以通过 - -log-driver 指定使用的 logging friver

[root@localhost ~]# docker run  --log-driver none  -dit -p 80:80 httpd

也可以直接修改docker 的启动脚本,指定 - -log-driver

[root@localhost ~]# vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock  --log-driver=none
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐