コンテナやサービスのログを表示

docker logs コマンドは、実行中のコンテナによって記録された(logged)情報を表示します。 docker service logs コマンドは、サービスに対する全てのコンテナによって記録された情報を表示します。

デフォルトでは、 service logdocker service logs はコマンドの出力を表示しますが、あたかもターミナルでコマンドをインタラクティブに実行したかのように表示します。UNIX と Linux コマンドは、たいていはコマンドの実行時に I/O ストリームを開きます。この I/O ストリームとは、 STDINSTDOUTSTDERR と呼びます。 STDIN はコマンドの入力ストリームであり、キーボードからの入力や他のコマンドからの入力を含みます。 STDOUT はたいていコマンドの通常出力であり、 STDERR は典型的にエラーメッセージを出力するために表示します。デフォルトでは、 docker logs はコマンドの STDOUTSTDERR を表示します。 I/O および Linux に関して詳しく知るには、 Linux Documentation Project にある I/O redirection の記事(英語) をご覧ください。

いくつかのケースにおいて、 docker logs では追加の手順を踏まないと、役に立つ情報を表示できないかもしれません。

  • ロギング・ドライバ を使うと、ログをファイルに送信したり、外部のホストや、データベース、その他のロギング・バックエンドに送り、かつ 「 dual logging(dual-logging) 」が無効であれば、 docker logs コマンドの結果が見づらい情報になる可能性があります。

  • もしも、ウェブサーバやデータベースのような、イメージがインタラクディヴではないプロセスを実行しようとすると、アプリケーションは STDOUTSTDERR のかわりにログファイルへと出力をする場合があります。

1つめのケースでは、ログは他の手段によって処理されるため、 docker logs を使わない方が良いでしょう。2つめのケースでは、公式の nginx イメージは1つの回避策しかなく、公式の Apache httpd イメージは他にも選択肢があります。

公式 nginx イメージは /var/log/nginx/access.log からのシンボリック・リンクを /dev/stdout に作成します。また、 /var/log/nginx/error.log から /dev/stderr へのシンボリック・リンクを作成します。このログファイルを上書きする指定により、ログは対象となる特別なデバイスに対して送信されます。この設定は Dockerfile をご覧ください。

公式 httpd イメージは、 httpd アプリケーションの設定を変更し、通常の出力を /proc/self/fd/1 (つまり STDOUT) にします。また、エラーは /proc/self/fd/2 (つまり STDERR )にします。詳細は Dockerfile をご覧ください。

次のステップ

  • ロギング・ドライバ の設定

  • Dockerfile を書く

参考

View logs for a container or service

https://docs.docker.com/config/containers/logging/