ウェブサイト検索

Docker ログ: その概要と使用方法 (例付き)


この記事では、Docker ログとその操作方法について知っておくべきことをすべて説明します。

Docker コンテナ内で実行されるアプリケーションが常に正しく動作するようになれば、作業ははるかに簡単になります。 必然的に物事がうまくいかなくなり始めた場合、どのように、そしてその理由を判断するための診断情報が必要になります。

あなたがコンテナ化されたアプリケーションの構築と管理を担当するシステム管理者にとって、Docker ログはあなたにとって最も重要なことの 1 つです。

ログの処理は、エラーを明らかにし、デバッグを支援し、アプリケーションのパフォーマンスを最適化するための最良の方法の 1 つです。それでは、始めましょう。

関連: Docker コンテナとは: 初心者向けの入門ガイド

Docker ログとは

まず、ログがどのように生成されるかを理解する必要があります。

簡単に言うとDocker ログは実行中のコンテナのコンソール出力です。これらは、コンテナ内で実行されるプロセスの stdout (標準出力) および stderr (標準エラー) ストリームを提供します。

コンテナーでは、Docker は stdoutstderr を監視し、コンテナー ログのソースであるストリームから出力を収集します。

関連: 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

上に示したパスの「」は、実行中のコンテナのIDです。どの id がどのコンテナに関連しているかわからない場合は、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 ログは、問題のデバッグとトラブルシューティングを迅速に行うのに役立ちます。このチュートリアルでは、それらが何であるか、それらを検査する方法、およびそれらを監視するためのオプションの使用方法を学びました。

ご質問やご意見がございましたら、お気軽にコメントください。

関連記事: