`docker-compose logs`从何而来?

Rya*_*yan 5 nginx docker docker-compose laradock

像大多数人在这里这里低调稀疏的Docker文档页面,我很困惑docker-compose logs.

当我跑步时cd /apps/laradock/ && docker-compose logs -f nginx,我看到很多天前的输出很长.

从中提取哪些文件?

我能找到的唯一的nginx日志文件是/apps/laradock/logs/nginx/error.log,它没有多少(所以不一样).

有没有办法"记录旋转"或以其他方式确保我在记录时不会花费超过一定数量的磁盘?

Ric*_*kwa 7

使用默认日志记录驱动程序json-file,您的日志将存储在其中/var/lib/docker/containers/<container-id>/.请注意,这里记录的是从容器的PID 1输出的stdout和stderr.

对于"日志循环",json文件驱动程序有一些选项可以传递给它以限制每个日志文件的大小和最大日志文件数.见max-size,并且max-file在的文件.

使用docker-compose,您可以设置以下选项:

version: '3'

services:
  myservice:
    image: ...
    logging:
      options:
        max-file: "3"
        max-size: "50m"
Run Code Online (Sandbox Code Playgroud)

  • 日志存储为磁盘上的json.但是当你运行`docker-compose logs`时,它知道解析json并输出原始文本.撰写版只是一个例子.2.1版支持`logging`字段.您的撰写文件没有"日志记录",因为它将所有内容保留为默认值(即没有日志轮换). (2认同)

cod*_*key 5

这取决于使用的日志驱动程序

您可以使用以下命令检查为 Docker 守护程序配置了哪一个:

docker info -f '{{.LoggingDriver}}'
Run Code Online (Sandbox Code Playgroud)

默认驱动程序json-file记录到:

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

Docker compose 然后在 docker-compose.yml 中聚合每个容器的日志。