从多个Docker容器中删除stdout

我有一个脚本,在后台模式下启动10个容器(图-D选项)。 我想聚集标准输出或从所有这些日志/ var /日志。 我怎样才能做到这一点?

容器开始使用不同的docker-compose文件,所以我不能做docker-compose up target1 target2 target3

docker日志只接受一个容器作为参数。

我正在考虑从所有容器上的/ var / log创build一个卷,将它们映射到docker之外的目录,确保日志不会碰撞名称,而使用bash尾部-f *。 但是,我会欣赏一个更优雅的解决scheme

这个bash脚本会做你想做的事情:

泊坞窗,日志

#!/bin/bash while [ $# -ne 0 ] do (docker logs -f -t --tail=10 $1|sed -e "s/^/$1: /")& shift done wait 

用法:

 $ docker-logs containerid1 containerid2 ... containeridN 

这个脚本的输出包含了来自被跟踪的日志的每一行,并预先加上了容器ID。

脚本在--follow模式下工作,必须用Ctrl-C中断。

请注意, docker logs的选项在脚本中是硬编码的。 如果您需要能够从命令行控制docker logs的选项,那么您将需要parsing命令行参数(例如getopts )。

Docker目前不支持1.12。 但我有一个解决方法,通过bash;

 docker ps | grep -w <filter-text> | for i in `awk '{ print $1 }'`; do docker logs -f --tail=30 $i & done 

我使用docker群模式自带1.12和部署许多复制。 所以我的所有容器都包含与服务名称相同的公共文本。 为了在Docker节点中放置所有日志,我在每个docker节点上都使用这个日志。 filter-text将只过滤我的容器。

如果你想停止拖尾,这对我有用。

 pkill -f 'docker logs'