如何跟踪所有Docker容器的日志?

use*_*669 5 docker docker-compose

我可以通过以下操作跟踪单个泊坞窗容器的日志:

docker logs -f container1
Run Code Online (Sandbox Code Playgroud)

但是,如何在同一屏幕上显示多个容器的日志?

docker logs container1 container2 
Run Code Online (Sandbox Code Playgroud)

不起作用。它给出了一个错误:

“docker logs” requires exactly 1 argument(s).
Run Code Online (Sandbox Code Playgroud)

谢谢。

jon*_*hid 5

如果您使用 docker-compose,这将显示来自不同容器的所有日志

docker-compose logs -f
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 5

docker logs命令无法传输多个日志文件。

\n

docker-compose logs -f可以流式传输项目的日志

\n

记录驱动程序

\n

您可以使用默认的日志记录驱动程序json之一将日志发送到公共点。systemdjournaldsyslog驱动程序可以轻松地在大多数系统上运行。任何其他集中式日志系统也可以工作。

\n

请注意, syslog在 Docker 守护进程上进行配置意味着该docker logs命令无法再查询日志,它们只会存储在系统日志放置的位置。

\n

一个简单的daemon.json系统日志:

\n
{\n  "log-driver": "syslog",\n  "log-opts": {\n    "syslog-address": "tcp://10.8.8.8:514",\n    "syslog-format": "rfc5424"\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

应用程序编程接口

\n

您可以编写通过 API 连接到每个容器并通过 Websocket 传输日志的工具。其中两个 Java 库是docker-clientdocker-java

\n

黑客

\n

或者在 Node.js 中运行多个docker logs并 munge 输出:

\n
const { spawn } = require(\'child_process\')\n\nfunction run(id){\n  let dkr = spawn(\'docker\', [ \'logs\', \'--tail\', \'1\', \'-t\', \'--follow\', id ])\n  dkr.stdout.on(\'data\', data => console.log(\'%s: stdout\', id, data.toString().replace(/\\r?\\n$/,\'\')))\n  dkr.stderr.on(\'data\', data => console.error(\'%s: stderr\', id, data.toString().replace(/\\r?\\n$/,\'\')))\n  dkr.on(\'close\', exit_code => {\n    if ( exit_code !== 0 ) throw new Error(`Docker logs ${id} exited with ${exit_code}`)\n  })\n}\n\nlet args = process.argv.splice(2)\nargs.forEach(arg => run(arg))\n
Run Code Online (Sandbox Code Playgroud)\n

它会在写入时转储数据docker logs

\n
\xe2\x97\x8b\xe2\x86\x92 node docker-logs.js 958cc8b41cd9 1dad69882b3d db4b844d9478\n958cc8b41cd9: stdout 2018-03-01T06:37:45.152010823Z hello2\n1dad69882b3d: stdout 2018-03-01T06:37:49.392475996Z hello\ndb4b844d9478: stderr 2018-03-01T06:37:47.336367247Z hello2\n958cc8b41cd9: stdout 2018-03-01T06:37:55.155137606Z hello2\ndb4b844d9478: stderr 2018-03-01T06:37:57.339710598Z hello2\n1dad69882b3d: stdout 2018-03-01T06:37:59.393960369Z hello\n
Run Code Online (Sandbox Code Playgroud)\n


Dan*_*ite 5

如果您有权访问 docker 服务器并拥有 root 权限:

tail -f  /var/lib/docker/containers/*/*.log
Run Code Online (Sandbox Code Playgroud)