web-dev-qa-db-ja.com

Dockerイメージのログを表示する方法は?

Dockerの世界では、Dockerコンテナ(つまり、実行中の画像)のログを簡単に見ることができます。しかし、イメージの作成中に、通常は複数のコマンドを発行します。たとえば、ノードプロジェクトのnpm installコマンド。これらのコマンドのログも参照すると有益です。ドキュメントからすばやく検索しましたが、Dockerイメージのログを取得する方法が見つかりませんでした。出来ますか?

13
Ville Miekk-oja

最も簡単な方法は、teeを使用して、すべてのコマンド出力のコピーをログファイルに送信することです。画像に添付する場合は、次のようなものを使用して、実行コマンドを画像内のログファイルに出力します。

RUN my-install-cmd | tee /logs/my-install-cmd.log

その後、簡単な一時コンテナを実行して、ログの内容を表示できます。

docker run --rm my-image cat /logs/my-install-cmd.log

イメージに添付されたログが必要ない場合、JHarrisが言うように、ビルドコマンドへの単一の変更(実行コマンドへの多くの変更の代わり)ですべてのビルドの出力をログに記録できます。

docker build -t my-image . | tee my-image.build.log

--rm=trueを使用せずにビルドする場合、すべての中間コンテナーがあり、各コンテナーには確認できるログがあります

docker logs $container_id

最後に、画像内のレイヤーの履歴があることを忘れないでください。各コマンドの出力は表示されませんが、出力をログに記録せず、特に多くのキャッシュが使用されている場合、各レイヤーがどのビルドからのものであるかを知るすべてのコマンドに役立ちます。

docker history my-image
13
BMitch

これを使用: https://github.com/jcalles/docker-wtee
手順を読んで、フィードバックをください。
または...
実行中のコンテナからログを取得する必要があり、コンテナにボリュームが公開されている場合、これを実行します:

docker run --rm -it --name testlogs --link <CONTAINERNAME/ID> --network CONTAINERNETWORK -p PORT:8080 --volumes-from CONTAINERNAME/ID  javiercalles/wtee sh
0
Javier Calles