この記事では、Dockerログとその操作方法について知っておく必要のあるすべてのことを紹介します。
Dockerコンテナー内で実行されているアプリケーションが常に正しく動作する場合、作業ははるかに簡単になります。物事が必然的にうまくいかなくなったときは、その方法と理由を理解するための診断情報が必要です。
システム管理者であり、コンテナ化されたアプリケーションの構築と管理を担当している場合、Dockerログは最も重要なものの1つです。ログの処理は、エラーを明らかにし、デバッグを支援し、アプリケーションのパフォーマンスを最適化するための最良の方法の1つです。
それでは、Dockerログとそのログファイルについて詳しく見ていきましょう。
Dockerログとは
まず、ログがどのように生成されるかを理解する必要があります。
一言で言えば、Dockerログは実行中のコンテナのコンソール出力です 。 stdout
を提供します (標準出力)およびstderr
(標準エラー)コンテナー内で実行されるプロセスのストリーム。コンテナ内でDockerはstdout
を監視します およびstderr
ストリームから出力を収集します。これがコンテナログのソースです。
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であるデフォルトのログ形式を使用する場合、コンテナのログは/var/lib/docker/containers/
にあります。 LinuxDockerホストのディレクトリ。
/var/lib/docker/containers/<container-id>/<container-id>-json.log
上記のパスでは、<container-id>
idです 実行中のコンテナの。どのidかわからない場合 はどのコンテナに関連しているので、docker container 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
このコマンドは、実行中のコンテナーのリストを出力します。この場合、最も重要なパラメータは CONTAINER 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ログは、問題のデバッグとトラブルシューティングをより迅速に行うのに役立ちます。このチュートリアルでは、それらが何であるか、それらを検査する方法、およびそれらを監視するためのオプションの使用方法を学習しました。
ご質問やご意見がございましたら、お気軽にコメントをお寄せください。