Docker ログ: その概要と使用方法 (例付き)
この記事では、Docker ログとその操作方法について知っておくべきことをすべて説明します。
Docker コンテナ内で実行されるアプリケーションが常に正しく動作するようになれば、作業ははるかに簡単になります。 必然的に物事がうまくいかなくなり始めた場合、どのように、そしてその理由を判断するための診断情報が必要になります。
あなたがコンテナ化されたアプリケーションの構築と管理を担当するシステム管理者にとって、Docker ログはあなたにとって最も重要なことの 1 つです。
ログの処理は、エラーを明らかにし、デバッグを支援し、アプリケーションのパフォーマンスを最適化するための最良の方法の 1 つです。それでは、始めましょう。
関連: Docker コンテナとは: 初心者向けの入門ガイド
Docker ログとは
まず、ログがどのように生成されるかを理解する必要があります。
簡単に言うとDocker ログは実行中のコンテナのコンソール出力です。これらは、コンテナ内で実行されるプロセスの stdout
(標準出力) および stderr
(標準エラー) ストリームを提供します。
コンテナーでは、Docker は stdout
と stderr
を監視し、コンテナー ログのソースであるストリームから出力を収集します。
関連: Ubuntu に Docker をインストールする: ステップバイステップ ガイド
Docker へのログインは、他の場所でのログインと同じではありません。 Docker では、stdout
ストリームと stderr
ストリームに書き込まれたものはすべて、暗黙的にログ ドライバーに送信されます。ログ ドライバーは、これらのストリームにアクセスしてログをファイルに送信するメカニズムを提供します。
Docker ログのデフォルトのドライバーは「json-file」で、Docker ホスト上のローカル ファイルにログを JSON 形式で書き込みます。
コンテナに保存されているログは、終了またはシャットダウンすると削除されます。
以下の例は、json-file ドライバーを使用して作成された JSON ログを示しています。
{"log":"Adding password for user webdav\n","stream":"stderr","time":"2021-08-01T15:58:05.329724917Z"}
次のコマンドを使用して、現在のデフォルトのロギング ドライバーを見つけることができます。
docker info --format '{{.LoggingDriver}}'
json-file
Docker ログはどこに保存されますか
デフォルトのログ形式である JSON を使用する場合、コンテナのログは Linux Docker ホストの /var/lib/docker/containers/
ディレクトリにあります。
/var/lib/docker/containers/<container-id>/<container-id>-json.log
上に示したパスの「dockercontainer ls
コマンドを実行して、実行中のすべてのコンテナを一覧表示できます。
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99e9b6f4b1a3 jbbodart/alpine-nginx-webdav "/bin/sh -c '/entryp…" 51 minutes ago Up 51 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp webdav
Docker ログを表示する方法
コンテナーを実行していて、このコンテナーの Docker ログにアクセスしたいとします。どうすればこのタスクを達成できますか?
まず、次のコマンドを使用して、現在実行中のコンテナーを確認できます。
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
99e9b6f4b1a3 jbbodart/alpine-nginx-webdav "/bin/sh -c '/entryp…" 58 minutes ago Up 58 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp webdav
このコマンドは、実行中のコンテナのリストを出力します。この場合、最も重要なパラメータはコンテナ ID であり、次のステップで使用します。
コンテナが実行されていることを確認したので、コンテナ ID を使用してそのすべてのログを確認しましょう。
Docker ログの表示
コンテナ ログをクエリするには、docker logs
コマンドを使用します。このコマンドは、実行中のコンテナ ログのすべての情報を表示します。 docker logs CONTAINER_ID
を使用すると、一意の ID で識別される特定のコンテナによってブロードキャストされたすべてのログを確認できます。
docker logs 99e9b6f4b1a3
172.17.0.1 - webdav [01/Aug/2021:18:38:39 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://localhost/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"
2021/08/01 18:39:09 [info] 10#10: *3 client 172.17.0.1 closed keepalive connection
172.17.0.1 - webdav [01/Aug/2021:18:39:09 +0000] "PUT /docker-logs.png HTTP/1.1" 201 25 "-" "curl/7.78.0"
コンテナログを追跡する方法
これによりログが表示されますが、継続的なログ出力を表示することはできません。代わりに、-f
フラグを使用すると、Docker コンテナーのログが追跡されます。
docker logs -f 99e9b6f4b1a3
最新の行のみを表示
場合によっては、コンテナーの最新の 10 ログ行だけを簡単に検証したい場合があります。 --tail
オプションを使用して、表示するログの数を指定できます。
docker logs --tail 10 99e9b6f4b1a3
特定の日付以降のログを表示する
Docker ログを検査するときは、情報が氾濫しないように、出力を指定の行数に制限したいことがよくあります。
特定の時点から現在までのログを表示したい場合は、 --since
オプションがこのタスクに役立ちます。
たとえば、過去 20 分間のコンテナー ログを表示するには、次のように記述します。
docker logs --since 20m 99e9b6f4b1a3
ISO 形式で提供されている限り、日付形式を記述することもできます。
docker logs --since 2021-07-19T10:00:00 99e9b6f4b1a3
特定の日付までのログを表示する
特定の日付までのログを表示するには、日付または期間を指定して --until
オプションを使用します。
docker logs --until 20m 99e9b6f4b1a3
以前に --since
オプションで行ったように、日付形式を指定することもできます。
docker logs --until 2021-07-19T10:00:00 99e9b6f4b1a3
結論
Docker ログは、問題のデバッグとトラブルシューティングを迅速に行うのに役立ちます。このチュートリアルでは、それらが何であるか、それらを検査する方法、およびそれらを監視するためのオプションの使用方法を学びました。
ご質問やご意見がございましたら、お気軽にコメントください。