Dockerコンテナのログ出力設定を確認する

エキサイト株式会社の@mthiroshiです。

Dockerコンテナのログ出力設定について、調べた内容を紹介します。

Dockerコンテナのログ出力設定

Dockerコンテナのログについて、公式ドキュメントに詳細が記載されてあります。

docs.docker.jp

docker logsコマンドを実行すると、ターミナルにログが表示されます。

ウェブサーバーを実行するコンテナの場合には、下記の注意点があります。

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

docker logsコマンドでログを出力するためには、出力先を標準出力にする変更が必要になります。

nginx公式イメージであれば、デフォルトでその設定がされています。

github.com

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log

ログファイルに対して標準出力、標準エラー出力シンボリックリンクを貼っています。

ウェブーサーバーのログ以外も同様の手順で標準出力に変更すれば、ログが表示されます。 例えば、プロジェクトのディレクトリ配下にログを出力するフレームワークがありますが、それらもシンボリックリンクを貼ることで変更できます。

AWS ECS (Fargate) のawslogsログドライバー

AWS ECS (Fargate) の awslogs ログドライバーは、標準出力ログを受け取って、CloudWatch LogsやS3にログを送ります。

ログが正しく送られない場合は、ログファイルの出力先が標準出力になっているかを確認してみてください。

最後に

今回は、Dockerコンテナのログ出力設定について、簡単に紹介しました。

既存のアプリケーションをDockerコンテナに移行する際には、見落とてしまう設定かと思います。

参考になれば幸いです。