带有容器日志的日志文件在哪里?

use*_*521 93 docker docker-compose

我正在运行几个容器docker-compose.我可以通过命令查看应用程序日志docker-compose logs.但是,我想访问原始日志文件,例如将其发送到某个地方?它在哪里?我猜这是每个容器(内部容器?)的单独日志,但我可以在哪里找到它?

小智 151

容器的日志可以在以下位置找到:

/var/lib/docker/containers/<container id>/<container id>-json.log
Run Code Online (Sandbox Code Playgroud)

(如果使用的是json的默认日志格式)

  • @PraveenSripati如果您执行docker ps,则会在第一栏中显示用于运行容器的容器ID。 (3认同)
  • 有很多文件夹,如`004279dd2985037950beeba7e6fe45c10354476d3b82afb68e72dd612b03a8ff`.如何知道要查找特定容器的文件夹? (2认同)
  • @PraveenSripati 编写 `docker ps`,您将获得所有可用的容器及其 ​​ID。复制所需容器的 ID,然后从 `/var/lib/docker/containers/` 运行 `ls | grep &lt;粘贴复制的 docker ID&gt;`。然后你会看到那个docker容器 (2认同)
  • @Chris我必须执行`docker ps --no-trunc`才能看到整个id (2认同)

Von*_*onC 90

您可以在docker inspect每个容器中查看其日志的位置:

docker inspect --format='{{.LogPath}}' $INSTANCE_ID
Run Code Online (Sandbox Code Playgroud)

并且,如果您试图找出日志管理其集体大小的位置,或者调整日志记录本身的参数,您将发现以下相关内容.

修复为日志保留的空间量

这取自Request以清除日志历史记录(问题1083)):

Docker 1.8和docker-compose 1.4已经存在一种使用docker compose log driver和log-opt max-size 来限制日志大小的方法:

mycontainer:
  ...
  log_driver: "json-file"
  log_opt:
    # limit logs to 2MB (20 rotations of 100K each)
    max-size: "100k"
    max-file: "20"
Run Code Online (Sandbox Code Playgroud)

在docker撰写版本为'2'的文件时,语法稍有改动:

version: '2'
...
mycontainer:
  ...
  logging:
    #limit logs to 200MB (4rotations of 50M each)
    driver: "json-file"
    options:
      max-size: "50m"
      max-file: "4"
Run Code Online (Sandbox Code Playgroud)

(请注意,在两种语法中,数字都表示为字符串,用引号表示)

docker-compose logs未终止的可能问题

  • issue 1866:logs如果容器已经停止,则命令不会退出


Tha*_*Guy 9

要查看每个容器的日志占用多少空间,请使用以下命令:

docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs ls -hl
Run Code Online (Sandbox Code Playgroud)

(您可能需要sudo之前ls).


Vas*_*cal 5

docker inspect <containername> | grep log
Run Code Online (Sandbox Code Playgroud)

  • `grep "LogPath"` 给出了准确的行,至少对于 Docker 版本 19.03.13 是这样。 (2认同)