Skip to content
VDS · Dockerとコンテナ

コンテナログを失わないための方法

Dockerログの保存場所、ディスクを圧迫しないためのサイズ制限の方法、コンテナ再作成後もログを保持するための設定を説明します。

更新日 2026年8月23日

サービスが停止したとき、ログだけが唯一の真実の情報源となります。デフォルトでは、Dockerはログをコンテナの隣のファイルに書き込み、サイズに上限を設けません。おしゃべりなアプリケーションは1週間でディスク全体を埋め尽くす可能性があります。

読み方

docker logs -f --tail 100 <container>
docker compose logs -f app
docker compose logs --since 30m --timestamps app
docker logs <container> 2>&1 | grep -i error | tail -50

覚えておく価値があります。Dockerはアプリケーションが標準出力と標準エラーに書き込んだ内容を表示します。コンテナ内の独自のファイルに書き込む場合、docker logs には何も表示されません。コンテナ内でログを探すか、出力をリダイレクトする必要があります。

docker compose exec app ls -la /var/log

今すぐサイズを制限する

すべてのコンテナに対するグローバル設定は /etc/docker/daemon.json です。

{
  "log-driver": "json-file",
  "log-opts": { "max-size": "20m", "max-file": "3" }
}
sudo systemctl restart docker

この設定は再起動後に作成されたコンテナに適用されます。実行中のコンテナは再作成する必要があります。単一のサービスに対しては、同じ内容をComposeに記述します。

services:
  app:
    logging:
      driver: json-file
      options:
        max-size: "20m"
        max-file: "3"

結果として、無制限の増加ではなく、サービスごとに最大60 MBになります。

予期せぬ事態になる前に現在のサイズを確認しましょう。 sudo du -sh /var/lib/docker/containers/*/*-json.log | sort -h | tail。 実行中のファイルを rm で削減することはできません。Dockerがディスクリプタを保持している間は容量が解放されません。正しい方法は、コンテナを再作成するか、sudo truncate -s 0 <file> を実行することです。

コンテナを超えてログを残す

ログファイルはコンテナとともに削除されます。履歴が重要な場合は、システムジャーナルに引き渡します。

logging:
  driver: journald
  options:
    tag: "myapp"
journalctl -t myapp -n 200 --since today
journalctl -t myapp -p err --since "2 days ago"

journald は記録を独自にローテーションし、/etc/systemd/journald.conf の SystemMaxUse 設定によって上限が設けられます。どれだけの容量を使用しているかを確認するには、journalctl --disk-usage を実行します。

複数のサービスを一度に扱う場合は、すべてを1か所に集める方が便利です。たとえば、記録を日ごとにファイルへ保存する専用のコレクターコンテナを使用します。ただし、まずは journald から始めましょう。すでに存在し、コストもかかりません。

障害をデバッグするときに確認すべきこと

  1. クラッシュ前の最後の200行: docker logs --tail 200 <container>。
  2. 終了コード: docker inspect -f '{{.State.ExitCode}} {{.State.OOMKilled}}' <container>。コード137と OOMKilled の true は、メモリ不足によりカーネルがプロセスを強制終了したことを意味します。リソース制限を参照してください。
  3. マシンのシステムログ: sudo dmesg -T | tail -50 は、メモリ不足による強制終了とディスクエラーを表示します。

よくある間違い

  • ログでディスクが埋まり、すべてのサービスが停止した。 サイズの制限は、Dockerのインストール直後に必ず行うべきです。
  • すでに削除されたコンテナのログを見ている。 docker compose down の後では、ログは消えています。事前に記録を journald に収集しておきましょう。
  • ログ内の機密情報。 アプリケーションはパスワードを含む接続文字列を出力することを好みます。マシンへのアクセス権を持つ誰もがログを読むことができます。
  • テキストコンソールでエラーを探している。 常に80×24で、長い行は切り捨てられます。ログを読むには、SSHまたは「Screen」コンソールの方が便利です。