如何拖尾所有码头集装箱的日志?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何拖尾所有码头集装箱的日志?相关的知识,希望对你有一定的参考价值。
我可以通过执行以下操作来拖尾单个docker容器的日志:
docker logs -f container1
但是,如何在同一屏幕上拖拽多个容器的日志?
docker logs container1 container2
不起作用。它给出了一个错误:
“docker logs” requires exactly 1 argument(s).
谢谢。
答案
docker logs
命令无法传输多个日志文件。
Logging Drivers
您可以使用除默认logging drivers之外的其中一个json
将日志发送到公共点。系统化的journald
或syslog
驱动程序可以在大多数系统上使用。任何其他集中式日志系统也可以工作。
请注意,在Docker守护程序上配置syslog
意味着docker logs
命令不能再查询日志,它们只会存储在syslog放置它们的位置。
一个简单的daemon.json
用于syslog:
{
"log-driver": "syslog",
"log-opts": {
"syslog-address": "tcp://10.8.8.8:514",
"syslog-format": "rfc5424"
}
}
Compose
docker-compose
能够为项目下控制的所有容器传输日志。
API
您可以编写attaches to each container via the API工具并通过websocket流式传输日志。其中两个Java库是docker-client和docker-java。
Hack
或者在node.js中运行多个docker logs
并输出输出:
const { spawn } = require('child_process')
function run(id){
let dkr = spawn('docker', [ 'logs', '--tail', '1', '-t', '--follow', id ])
dkr.stdout.on('data', data => console.log('%s: stdout', id, data.toString().replace(/
?
$/,'')))
dkr.stderr.on('data', data => console.error('%s: stderr', id, data.toString().replace(/
?
$/,'')))
dkr.on('close', exit_code => {
if ( exit_code !== 0 ) throw new Error(`Docker logs ${id} exited with ${exit_code}`)
})
}
let args = process.argv.splice(2)
args.forEach(arg => run(arg))
哪个转储数据,因为docker logs
写道。
○→ node docker-logs.js 958cc8b41cd9 1dad69882b3d db4b844d9478
958cc8b41cd9: stdout 2018-03-01T06:37:45.152010823Z hello2
1dad69882b3d: stdout 2018-03-01T06:37:49.392475996Z hello
db4b844d9478: stderr 2018-03-01T06:37:47.336367247Z hello2
958cc8b41cd9: stdout 2018-03-01T06:37:55.155137606Z hello2
db4b844d9478: stderr 2018-03-01T06:37:57.339710598Z hello2
1dad69882b3d: stdout 2018-03-01T06:37:59.393960369Z hello
另一答案
如果您使用的是docker-compose,则会显示来自不同容器的所有日志
docker-compose logs -f
以上是关于如何拖尾所有码头集装箱的日志?的主要内容,如果未能解决你的问题,请参考以下文章