1. docker logs
1.1. 描述
docker logs
命令获取容器标准输出信息,一般是容器的日志。
docker 的日志输出位置
- STDOUT 标准输出
- STDERR 标准错误
- 以 json 格式存放在容器对于到日志文件中
- 使用 volume 挂载到本地存储或其他存储
查看容器日志文件的生命周期是跟随容器而产生的,如果删除了某个容器,相应的日志文件也会随着被删除,除非通过 volume 挂载到外部存储。
当我们输入 ocker logs
的时候会转化为 Docker Client 向 Docker Daemon 发起请求, Docker Daemon 在运行容器时会去创建一个协程(goroutine),绑定了整个容器内所有进程的标准输出文件描述符。因此容器内应用的所有只要是标准输出日志,都会被 goroutine 接收,Docker Daemon 会根据容器 ID 和日志类型读取日志内容,最终默认会输出到用户终端上并且通过 json 格式存放在 /var/lib/docker/containers 目录下。
1.2. 帮助
$ docker logs --help
Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
--details Show extra details provided to logs
-f, --follow Follow log output
--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
--tail string Number of lines to show from the end of the logs (default "all")
-t, --timestamps Show timestamps
--until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
1.3. 选项
选项 | 默认值 | 描述 |
---|---|---|
--details | - | 显示更详细的信息 |
-f, --follow | - | 实时跟踪容器的 output 日志输出 |
--since string | - | 显示自某个 timestamp 之后的日志(e.g. 2013-01-02T13:23:37),或相对时间,(e.g. 42m for 42 minutes) |
--tail string | all | 从日志末尾显示多少行日志, 默认是 all |
-t, --timestamps | - | 显示时间戳 |
--until string | - | 显示自某个timestamp之前的日志 (e.g. 2013-01-02T13:23:37) ,或相对时间(e.g. 42m for 42 minutes) |
1.4. 示例
- 显示容器的日志
在使用 docker logs
直接查看时,会一次性在输出所有的日志文件,输出完成后退出
例如:
docker logs CONTAINER_ID
...
2020-02-12T22:34:28.798+08:00 [ERROR] plugin/errors: 2 135.193.189.206.in-addr.arpa. PTR: read udp 172.17.32.2:50864->10.197.26.241:53: i/o timeout
2020-02-13T06:48:26.521+08:00 [ERROR] plugin/errors: 2 187.238.194.1.in-addr.arpa. PTR: read udp 172.17.32.2:34395->10.197.26.240:53: i/o timeout
2020-02-13T16:12:58.103+08:00 [ERROR] plugin/errors: 2 1.123.57.103.in-addr.arpa. PTR: read udp 172.17.32.2:57114->10.197.26.240:53: i/o timeout
- 查看日志并显示时间戳
docker logs -t CONTAINER_ID
2020-02-12T22:48:26.521956414Z 2020-02-13T06:48:26.521+08:00 [ERROR] plugin/errors: 2 187.238.194.1.in-addr.arpa. PTR: read udp 172.17.32.2:34395->10.197.26.240:53: i/o timeout
2020-02-13T08:12:58.103664842Z 2020-02-13T16:12:58.103+08:00 [ERROR] plugin/errors: 2 1.123.57.103.in-addr.arpa. PTR: read udp 172.17.32.2:57114->10.197.26.240:53: i/o timeout
- 实时跟踪容器的output日志输出
实时跟踪容器的output日志输出,直到容器退出或手动 Ctrl + C
终止
docker logs -f CONTAINER_ID
2020-02-13T06:48:26.521+08:00 [ERROR] plugin/errors: 2 187.238.194.1.in-addr.arpa. PTR: read udp 172.17.32.2:34395->10.197.26.240:53: i/o timeout
2020-02-13T16:12:58.103+08:00 [ERROR] plugin/errors: 2 1.123.57.103.in-addr.arpa. PTR: read udp 172.17.32.2:57114->10.197.26.240:53: i/o timeout
^C
- 只显示最后几行日志
[root@ceph0 ~]# docker logs --tail 3 CONTAINER_ID
2020-02-14T03:50:13.758+08:00 [ERROR] plugin/errors: 2 raw.githubusercontent.com. A: read udp 172.17.32.2:49923->10.197.26.241:53: i/o timeout
2020-02-14T06:35:17.803+08:00 [ERROR] plugin/errors: 2 7.17.232.49.in-addr.arpa. PTR: read udp 172.17.32.2:48518->10.197.26.240:53: i/o timeout
2020-02-14T08:10:13.755+08:00 [ERROR] plugin/errors: 2 raw.githubusercontent.com. A: read udp 172.17.32.2:34327->10.197.26.241:53: i/o timeout
You have mail in /var/spool/mail/root
- 只显示最后3条的日志,并持续更新日志显示
[root@ceph0 ~]# docker logs -f --tail 3 CONTAINER_ID
2020-02-14T03:50:13.758+08:00 [ERROR] plugin/errors: 2 raw.githubusercontent.com. A: read udp 172.17.32.2:49923->10.197.26.241:53: i/o timeout
2020-02-14T06:35:17.803+08:00 [ERROR] plugin/errors: 2 7.17.232.49.in-addr.arpa. PTR: read udp 172.17.32.2:48518->10.197.26.240:53: i/o timeout
2020-02-14T08:10:13.755+08:00 [ERROR] plugin/errors: 2 raw.githubusercontent.com. A: read udp 172.17.32.2:34327->10.197.26.241:53: i/o timeout
^C
查看最近30分钟的日志:
$ docker logs --since 30m CONTAINER_ID
- 查看某时间之后的日志:
$ docker logs -t --since="2018-02-08T13:23:37" CONTAINER_ID
- 查看某时间段日志:
$ docker logs -t --since="2018-02-08T13:23:37" --until "2018-02-09T12:23:37" CONTAINER_ID