[Docker] tailのようにコンテナ内の標準出力・標準エラー出力をtrackingする方法

2024/09/14

author

masyus

本番環境で運用しているDockerコンテナがアプリケーションのログを標準出力・標準エラー出力しており、且つローカル開発環境で利用しているDockerコンテナもログ出力が同様のケースはよくあることだと思います。

その場合、ローカル開発環境におけるアプリケーションログをどのようにトラッキングするかで少し戸惑ったことがあったため、記事に書き起こしました。ログをファイル出力しているアプリケーションで開発することに慣れていると戸惑うかもしれませんが、やり方は簡単です。

バージョン情報

  • Docker: 24.0.7
  • Docker Compose: v2.23.3-desktop.2

docker logsもしくはdocker compose logsコマンドを活用する

実現方法は2つあります。

docker logs -f <コンテナidもしくはコンテナ>

もしくはDocker Composeを利用している場合、

docker compose logs -f <サービス>

でも同様にトラッキングできます。-fオプションは--followオプションと同値で、

「出力をフォローし続ける(表示し続ける)」

を意味します。

--tailを併用して初期出力を抑える

-fオプションを付与するだけで目的を果たせますが、-fだけを指定した場合は

コマンド実行直後に過去の標準出力・標準エラー出力を全て出力

してしまいます。場合によってはターミナル上のコマンド実行履歴が一瞬で見れなくなることがあるので、--tail n(n>0)オプションを付随させて

「ログの最終から数えた行以降」だけを初期出力させる

のが良いでしょう。

Docker Composeで環境構築している場合、どちらのコマンドが良いか?

おそらくほとんどの開発者はDocker Composeを使われていると思いますが、Docker Composeを活用している場合は

docker compose logs -f

を活用するのが良いと思います。と言いますのも

  • docker compose logs -f: 全てのサービスのログをトラッキングする
  • docker compose logs -f <サービス名1> <サービス名2>: サービス1, サービス2のログをトラッキングする
  • docker compose logs -f <サービス名>: サービス1のログをトラッキングする

のように、複数のコンテナを対象にトラッキングすることができるからです。コンテナを跨いでトラッキングしたいニーズはあると思いますのでお勧めです。

参考