docker logs

命令

docker logs

描述

docker logs 命令获取容器的详细信息

docker的日志输出位置

  • stdout 标准输出
  • stderr 标准错误
  • 以json格式存放在容器对于到日志文件中
  • 使用volume挂载到本地存储或其他存储

docker logs查看容器日志文件的生命周期是跟随容器而产生的,如果删除了某个容器,相应的日志文件也会随着被删除,除非通过volume挂载到外部存储。

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

帮助

# 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)

选项

  • –details 显示更详细的信息
  • -f, –follow 实时跟踪容器的output日志输出
  • –since string 显示自某个timestamp之后的日志(e.g. 2013-01-02T13:23:37),或相对时间,(e.g. 42m for 42 minutes)
  • –tail string 从日志末尾显示多少行日志, 默认是all
  • -t, –timestamps 显示时间戳
  • –until string 显示自某个timestamp之前的日志 (e.g. 2013-01-02T13:23:37) ,或相对时间(e.g. 42m for 42 minutes)

示例

  • 显示容器的日志

在使用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