🔖

【Docker】コンテナログを整理して直近の出力を確認する方法

に公開

はじめに

Dockerのコンテナログは docker logs <container> で確認できますが、
過去の出力が溜まって長くなり、直近の実行結果が見にくくなることがあります。

本記事では、コンテナログを整理して直近の出力を確認する方法を備忘録としてまとめます。

方法1:特定のコンテナのログを空にする

コンテナIDを確認し、そのコンテナのログファイルを空にします。

docker ps -a

出力例:

CONTAINER ID   IMAGE             COMMAND                  CREATED       STATUS       PORTS                  NAMES
abc123def456   sample-proxy      "uvicorn main:app --…"   3 hours ago   Up 3 hours   0.0.0.0:8080->8080/tcp web-proxy
xyz789ghi012   sample-backend    "uvicorn main:app --…"   3 hours ago   Up 3 hours   8000/tcp               backend-api

ログファイルは /var/lib/docker/containers/<コンテナID>/ に保存されています。
なお、このパスは Linux 環境での例です。Mac/Windows の Docker Desktop では内部構造が異なる点に注意してください。

sudo truncate -s 0 /var/lib/docker/containers/<コンテナID>/<コンテナID>-json.log

このコマンドを実行することで、そのコンテナのログが空になり、次回の実行から新しいログだけを確認できます。

truncate -s 0 はファイルサイズを 0 にするコマンドで、ログの中身を消去します。

方法2:すべてのコンテナログを一括で空にする

デバッグ用にすべてのコンテナのログをリフレッシュしたい場合は、find コマンドでまとめて削除できます。

sudo find /var/lib/docker/containers/ -name '*-json.log' -exec truncate -s 0 {} \;

これで、すべてのコンテナログが空になります。

方法3:ログを消さずに直近の出力を確認する

ログを消す以外にも、次のような方法で直近のログだけを確認できます。

--since オプション

docker logs --since 5m <container>

このコマンドでは、直近5分間のログのみ表示できます。
過去ログを消さずに「直近のログだけを確認したい」ときに便利です。

--tail オプション

docker logs --tail 100 <container>

このコマンドでは、最新の100行だけを表示できます。

まとめ

  • 特定のコンテナだけリフレッシュしたいtruncate でそのログファイルを空にする
  • 一括でリフレッシュしたいfind + truncate を使う
  • 消さずに確認したい--since オプションや--tailオプションで区切る

おわりに

ログを消しておくと、次の実行結果だけをすっきり確認できるので、デバッグ時に役立ちます。
容量削減の目的だけでなく、日常の開発でも知っておくと便利です。

ただし、本番環境ではログの削除よりもログローテーションや監視ツールの導入が推奨されます。

Discussion