🔖
【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