Docker 日志
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