2016-06-29 11 views
4

バックグラウンドモードで10個のコンテナを開始するスクリプトがあります(fig up -dオプション)。私はすべてのstdoutまたは/ var/logのログを集計したいと思います。これどうやってするの?複数のDockerコンテナからのテールstdout

私はターゲット1 TARGET2 target3

ドッカログをアップドッキングウィンドウ構成することができませんので、容器は唯一のパラメータとして一つの容器を受け入れる異なるドッキングウィンドウ・コンファイルを使用して開始されます。

私はすべてのコンテナの/ var/logからボリュームを作成し、それらをdocker外のディレクトリにマッピングし、ログに衝突する名前がなく、bash tail -f *を使用していることを確認していました。しかし、私はこのbashスクリプトは、あなたがやりたいだろう

答えて

4

よりエレガントなソリューションをいただければ幸いです。

ドッキングウィンドウ・ログ

#!/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のオプションを制御できるようにする必要がある場合は、コマンドライン引数を解析する必要があります(たとえば、getopts)。

0

ドッカーはまだ1.12をサポートしていません。しかし、私はbashを介して回避策を持っています。

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

私はドッカーモードを使用しています。モードは1.12で付属しており、多くのレプリケーションを展開しています。したがって、すべてのコンテナにはサービス名と同じ共通テキストが含まれています。ドッカーノードのすべてのログをテールするには、各ドッカーノードでこれを使用しています。 filter-textは自分のコンテナのみをフィルタリングします。

テーリングを停止したい場合は、これは私のために働きます。

pkill -f 'docker logs' 
関連する問題