コンテナーまたはサービスのログ確認
docker logs
は実行中のコンテナーが出力するログ情報を確認するコマンドです。
docker service logs
コマンドは、1 つのサービスに参加しているコンテナーすべてのログ情報を確認します。
出力されるログ情報およびその出力書式は、ほぼコンテナーのエンドポイントコマンドにより定まります。
デフォルトにおいてdocker logs
やdocker service logs
は、端末画面にて対話的にコマンドを入力した際、そのコマンドが出力するものと同じような情報を得ることができます。
UNIX や Linux コマンドは普通、3 つの I/O ストリームを実行時に開きます。
それはSTDIN
、STDOUT
、STDERR
です。
STDIN
はコマンドの入力ストリームです。
これはキーボードから入力されるか、あるいは他のコマンドからの入力の場合もあります。
STDOUT
はコマンドの標準出力です。
そしてSTDERR
は通常、エラーメッセージを出力するために用いられます。
デフォルトでdocker logs
は、コマンドのSTDOUT
とSTDERR
を表示します。
I/O と Linux に関しての詳細は Linux Documentation Project における I/O リダイレクション を参照してください。
docker logs
の出力だけでは不十分なことがあります。
その場合は別の手順が必要になります。
- ログドライバー を利用するにあたって、そのドライバーのログ出力先が、ファイル、外部ホスト、データベース、別のログバックエンドであって、“デュアルログ” が無効になっている場合、
docker logs
の出力は不十分なものになる場合があります。 - 実行するイメージが、ウェブサーバーやデータベースのような非対話的なプロセスである場合、ログは
STDOUT
やSTDERR
にではなく、ログファイルに対して出力されるかもしれません。
上の 1 点めに該当する場合、ログ出力が他の方法で処理されているため、docker logs
は利用しないようにすることが考えられます。
2 点めの場合、nginx
の公式イメージではその解決がなされていて、公式の 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 を記述します。