ビルドサーバーで単体テストを実行しており、何かが失敗した場合に分析のためにログ結果をキャプチャしたいと思います。 docker-compose logs
の出力をファイルにリダイレクトする方法、またはログファイル自体が実際に存在する場所を見つける方法をまだ見つけていません。
私は同等のものが欲しい:
docker-compose logs > logs.txt
編集-明確化:
私のすべてのdockerコンテナーは、docker-compose logs
を手動で実行すると明らかになる有用なログを生成します。このプロセスのスクリプトを作成して、同じログをビルドサーバー上のアーティファクトであるファイルに保存します。基本的に、docker-compose logs
の出力はファイルに保存されますが、docker-compose logs
は終了しません。
デフォルトでは、Dockerはjson-file
ドライバーを使用してコンテナーログを記録します。ログの生のjson出力は次の場所にあります。
/var/lib/docker/containers/[container-id]/[container-id]-json.log
この場所を取得するには、次を実行します。
docker inspect --format='{{.LogPath}}' [container-id or container-name]
docker-compose logs [service-name]
を実行すると、docker-compose
は参照するサービス(コンテナ)にアタッチし、 LogPrinter オブジェクトは上記のファイルのコンテンツを出力しますが、読みやすい。
関連ドキュメント: https://docs.docker.com/compose/compose-file/#logging
何を達成しようとしているのかわかりません。再現しようとしていますか
docker-compose logs > logs.txt
構成ファイル内に命令として?または、リダイレクトが出力全体を「キャッチ」しないという問題ですか?
後で、次のことができます。
docker-compose logs --no-color >& logs.txt
または
docker-compose logs --no-color |& tee logs.txt
ターミナルでログを確認し、同時にファイルにダンプします。
後のリリースのdocker-compose 1.7.x +では修正されています。 https://github.com/docker/compose/issues/2227 & https://github.com/docker/compose/releases/tag/1.7. を参照
その前に、それを実現する別の方法があります。受け入れられた答えの解決策は、ホストファイルに直接アクセスすることです。これは、リモート/セキュリティの場合には適用できない場合があります。
以下では、docker-compose ps
コマンドからコンテナ名を取得し、docker logs
コマンドをループさせることができます。
docker-compose ps | tail -n +3 | awk '{print $1}' | xargs -n1 docker logs
docker-compose logs
コマンドdoes終了(--follow
設定を追加しない限り)。
ここで起こりそうな問題は、ログが非常に大きいため、ログのフォーマットと出力に時間がかかることです。読みたい行の数と読みたいコンテナの両方を指定することで出力を制限する場合、この問題を減らすことができます。
試してください:
docker-compose logs --no-color --tail=1000 CONTAINER_NAME > logs.txt
(必要に応じてテール番号を調整します。出力を簡素化するために「--no-color」を追加しましたが、必要ではありません。)
私が作成したソリューションは、いくつかの機能強化を加えたChris McKinnelの回答に基づいています。
Nginxコンテナーから最後の1MIOレコードをダンプする必要があり、docker-compose logs --tail 1000000 nginx > last1mio.log
が遅すぎたため、出力は通常のnginxファイルとまったく同じではありませんでした。
これは私のために働く解決策です:
docker inspect --format='{{.LogPath}}' nginx-1 \
| xargs tail -n 1000000 \
| jq -r -j .log > last1mio.log 2>&1
ノート:
nginx-1
-この定数を持つためにdocker-composeオプションcontainer_name:
を使用します私の場合、nginxログの最後の1mio行のダンプにはcca 10秒かかります。