docker logs参数说明

  1. $ docker logs [OPTIONS] CONTAINER
  2. Options:
  3. --details 显示更多的信息
  4. -f, --follow 跟踪日志输出,最后一行为当前时间戳的日志
  5. --since string 显示自具体某个时间或时间段的日志
  6. --tail string 从日志末尾显示多少行日志, 默认是all
  7. -t, --timestamps 显示时间戳

-t 显示时间戳

  1. [www@iZbp1cvee05xzo43l08e6tZ ~]$ docker logs bdbdee298d2c --tail 1
  2. ts=2021-02-06T00:35:12.242046366Z caller=log.go:124 component=tailer level=info msg="Successfully reopened truncated /home/kubernetes/k8s-yaml/test/project-B/java/fanxxx-ads/logs/start.log"
  3. [www@iZbp1cvee05xzo43l08e6tZ ~]$ docker logs -t bdbdee298d2c --tail 1
  4. 2021-02-06T00:35:12.242199029Z ts=2021-02-06T00:35:12.242046366Z caller=log.go:124 component=tailer level=info msg="Successfully reopened truncated /home/kubernetes/k8s-yaml/test/project-B/java/fanxxx-ads/logs/start.log"

—since [5m|5s|1h] 显示指定时间内的日志
—since

  1. [www@iZbp1cvee05xzo43l08e6tZ ~]$ docker logs --since 5m bdbdee298d2c
  2. ts=2021-02-06T00:40:29.35380607Z caller=log.go:124 component=tailer level=info msg="Re-opening truncated file /home/kubernetes/k8s-yaml/test/project-B/java/fanxxx-ads/logs/start.log ..."
  3. ts=2021-02-06T00:40:29.353947679Z caller=log.go:124 component=tailer level=info msg="Successfully reopened truncated /home/kubernetes/k8s-yaml/test/project-B/java/fanxxx-ads/logs/start.log"

容器日志的输出形式

  1. stdout 标准输出
  2. stderr 标准错误
  3. 以json格式存放在容器对于到日志文件中

docker日志内容类型

  1. docker自身运行时Daemon的日志内容
  2. docker容器的日志内容

docker logs的实现原理

“Docker Daemon是Docker架构中一个常驻在后台的系统进程,它在后台启动了一个Server,Server负责接受Docker Client发送的请求;接受请求后,Server通过路由与分发调度,找到相应的Handler来执行请求。–《Docker源码分析》”

当我们输入docker logs的时候会转换为Docker Client向docker daemon发起请求,docker daemon在运行容器时会去创建一个协程(goroutine),绑定了整个容器内所有进程的标准输出文件描述符。因此容器内应用的所有只要是标准输出日志,都会被 goroutine 接收,Docker Daemon会根据容器id和日志类型读取日志内容,最终会输出到用户终端上并且通过json格式存放在/var/lib/docker/containers目录下。

容器日志文件的生命周期

docker logs是跟随容器而产生的,如果删除了某个容器,相应的日志文件也会随着被删除