コンテナやサービスのログを表示¶
docker logs
コマンドは、実行中のコンテナによって記録された(logged)情報を表示します。 docker service logs
コマンドは、サービスに対する全てのコンテナによって記録された情報を表示します。
デフォルトでは、 service log
や docker service logs
はコマンドの出力を表示しますが、あたかもターミナルでコマンドをインタラクティブに実行したかのように表示します。UNIX と Linux コマンドは、たいていはコマンドの実行時に I/O ストリームを開きます。この I/O ストリームとは、 STDIN
、 STDOUT
、STDERR
と呼びます。 STDIN
はコマンドの入力ストリームであり、キーボードからの入力や他のコマンドからの入力を含みます。 STDOUT
はたいていコマンドの通常出力であり、 STDERR
は典型的にエラーメッセージを出力するために表示します。デフォルトでは、 docker logs
はコマンドの STDOUT
と STDERR
を表示します。 I/O および Linux に関して詳しく知るには、 Linux Documentation Project にある I/O redirection の記事(英語) をご覧ください。
いくつかのケースにおいて、 docker logs
では追加の手順を踏まないと、役に立つ情報を表示できないかもしれません。
ロギング・ドライバ を使うと、ログをファイルに送信したり、外部のホストや、データベース、その他のロギング・バックエンドに送り、かつ 「
dual logging 」が無効であれば、docker logs
コマンドの結果が見づらい情報になる可能性があります。
もしも、ウェブサーバやデータベースのような、イメージがインタラクディヴではないプロセスを実行しようとすると、アプリケーションは
STDOUT
やSTDERR
のかわりにログファイルへと出力をする場合があります。
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 をご覧ください。