Docker: コンテナ内の標準出力の表示 – logs

Dockerサブコマンドの一つである、logsはコンテナ内プロセスの標準出力及び標準エラー出力を表示する。

Usage: docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
-f, –follow=false Follow log output
<後略>

使用例

例として、下記のDockerfileで構築したコンテナの標準出力を確認する。当該Dockerfileは一つ誤りがあり、ビルドは成功しても実行時にエラーとなる。

イメージのビルド

ここでは、build_httpdディレクトリに保管した上記のDockerfileをビルドする際、-tオプションを用いて「リポジトリー名:タグ名」をyuukun/httpd:ver1.1と指定している。

コンテナの実行

作成したイメージにweb01の名前を付け、ポート80をホストOS側の80番に紐づけて起動する。オプション-itで擬似端末への標準出力設定となり、-dでバックグラウンド起動となる。

参考) 公式ドキュメント – run

Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
Run a command in a new container
-d, –detach=false Run container in background and print container ID
-i, –interactive=false Keep STDIN open even if not attached
-t, –tty=false Allocate a pseudo-TTY

その後、下記のコマンドでstatusを確認するがExited (127)で異常終了している。

docker logsによる標準出力の確認

ここで、下記の通りコンテナ名を引数にdocker logsコマンドを使用すると、標準エラー出力が分かる。

結果として、CentOS7上では既にserviceコマンドが廃止されている為、command not foundエラーが発生し&&以降のbashが起動せずに異常終了したことが分かる。

補足

では仮に下記の通り、Dockerfileを下記の通り修正した場合は上手くいくかと言うと、別種のエラーが発生する。

Failed to get D-Bus connection: Operation not permittedエラー

当該エラーに関わる対処法については下記のサイトに記述があるが、何れもDockerfile上でサービスの立ち上げまでは実現できてない。コンテナの起動後にコンテナを操作してサービスの立ち上げを実施している。この場合、Dockerfileのメリットを活かせていないので、使用コンテナをCentOS 6に変更するという考え方もある。