docker log

  1. 查看docker日志
  2. docker logs -f --tail 1000 镜像号

详解

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:37Z) or relative (e.g. 42m for 42 minutes)
  -n, --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:37Z) or relative (e.g. 42m for 42 minutes)

-n 和—tail 一样的效果
-t 和—timestamps 一样的效果

docker logs -f -t --since='2022-04-02'  --tail=10 容器号
-f实时 -t显示时间戳  --since 指定日期  --tail=显示最后多少行
实时输出指定日期之后的日志,显示日志时间戳,显示最后10行
docker logs [OPTIONS] CONTAINER

Options:

--details 显示更多的信息

-f, --follow 实时输出日志,最后一行为当前时间戳的日志

--since string 显示某个开始时间的所有日志。

--tail string 显示最后多少行日志, 默认是all  仅列出最新N条容器日志
(如: -tail=10 : 查看最后的 10 行日志。)

-t, --timestamps 显示时间戳

实例

docker logs e956279d15ef #输出历史所有日志
2022-04-02 15:43:23.444  INFO 7 --- [nio-8080-exec-3] c.g.z.s.p.s.impl.RequestServiceImpl      : 响应报文:
{"code":"0","message":{"code":"0","msg":"请求成功"
docker logs -t e956279d15ef    #输出历史所有日志,显示日志时间戳
2022-04-02T07:43:23.445447855Z {"code":"0","message":{"code":"0","msg":"请求成功"
docker logs --tail 1 e956279d15ef #只显示最后一行日志
{"code":"0","message":{"code":"0","msg":"请求成功"
docker logs -n 1 e956279d15ef #只显示最后一行日志
{"code":"0","message":{"code":"0","msg":"请求成功"
docker logs -t --tail 1 e956279d15ef   #只显示最后一行日志,显示日志的时间戳
2022-04-02T07:43:23.445447855Z {"code":"0","message":{"code":"0","msg":"请求成功"
docker logs --since 1ms e956279d15ef   #只显示最后1毫秒日志
2022-04-03 01:49:42.737  INFO 7 --- [nio-8080-exec-6]  : 请求报文:{"data":
2022-04-03 01:49:42.889  INFO 7 --- [nio-8080-exec-2]  : 响应报文:{"code":"0","message":{"code":"0","msg":"请求成功"
2022-04-03 01:49:43.060  INFO 7 --- [nio-8080-exec-6]  : 响应报文:{"code":"0","message":{"code":"0","msg":"请求成功"
docker logs -t --since='2022-04-02' e956279d15ef   #输出指定日期之后的日志,显示时间戳
2022-04-02T07:43:23.445290735Z 2022-04-02 15:43:23.444  INFO 7 --- [nio-8080-exec-3] c.g.z.s.p.s.impl.RequestServiceImpl      : 响应报文:
2022-04-02T07:43:23.445447855Z {"code":"0","message":{"code":"0","msg":"请求成功

日志知识扩展

容器日志的输出形式

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

    docker日志内容类型

  • docker自身运行时Daemon的日志内容

  • 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是跟随容器而产生的,如果删除了某个容器,相应的日志文件也会随着被删除。
转自:https://segmentfault.com/a/1190000010086763