如何拖尾所有码头集装箱的日志?

时间:2018-03-01 04:53:42

标签: docker docker-compose

我可以通过执行以下操作来拖尾单个docker容器的日志:

docker logs -f container1

但是,如何在同一屏幕上拖拽多个容器的日志呢?

docker logs container1 container2 

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

“docker logs” requires exactly 1 argument(s).

谢谢。

3 个答案:

答案 0 :(得分:2)

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

<!DOCTYPE html>
<html>

<head>
</head>
<body>
        <img src="https://blognumbers.files.wordpress.com/2010/10/0.jpg?w=371" style="border:1px solid red" onclick="myfun1()"> 
        <img src="https://blognumbers.files.wordpress.com/2010/10/1.jpg?w=371" style="border:1px solid red" onclick="myfun2()"> 
</body>
<script>
    function myfun1(){
        alert('You have clicked image 0')
    }
    function myfun2(){
        alert('You have clicked image 1')
    }
</script>
</html>

答案 1 :(得分:1)

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

记录驱动程序

您可以使用默认json以外的logging drivers之一将日志发送到公共点。 systemd journaldsyslog驱动程序可以在大多数系统上使用。任何其他集中式日志系统也可以工作。

请注意,在Docker守护程序上配置syslog意味着docker logs命令不能再查询日志,它们只会存储在syslog放置它们的位置。

syslog的简单daemon.json

{
  "log-driver": "syslog",
  "log-opts": {
    "syslog-address": "tcp://10.8.8.8:514",
    "syslog-format": "rfc5424"
  }
}

撰写

docker-compose能够为项目下控制的所有容器传输日志。

API

您可以编写attaches to each container via the API工具并通过websocket流式传输日志。其中两个Java库是docker-clientdocker-java

哈克

或者在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(/\r?\n$/,'')))
  dkr.stderr.on('data', data => console.error('%s: stderr', id, data.toString().replace(/\r?\n$/,'')))
  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

答案 2 :(得分:0)

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

tail -f  /var/lib/docker/containers/*/*.log