Dockerコンテナのログがあふれてディスク容量不足を解消!

Dockerコンテナのログがあふれてディスク容量不足!

Dockerを運用していると、コンテナのログが大量に溜まり、ディスク容量を圧迫することがあります。特に docker-compose を使用している環境では、デフォルトのログ設定のままだとログが無制限に蓄積され、気づかないうちにストレージがいっぱいになることも。

ディスク容量不足の場所を探していたところ、コンテナの肥大化を確認しました。

du -shc /var/lib/docker/containers/* -x | sort -rh
9.3G    合計
7.5G    ./bba63eea9d895b78284dc1ec7a4ba9d74185dd8ec441c5bc41da954c5d622ab1
808M    ./0b01e61f5d2d745b3b0f496077cd6fd94e1c8d0d6aecb2965ad31f38ad639e9c
・・・

そこで、本記事では docker-compose を使ったログの管理方法について解説します。

ログがディスクを圧迫する原因

Docker のデフォルト設定では、コンテナのログは json-file ドライバを使って /var/lib/docker/containers/ 配下に無制限に蓄積されます。そのため、長期間運用するとログが肥大化し、ディスク容量を圧迫する原因になります。

現状のログサイズを確認する

コンテナごとのログサイズを確認するには、以下のコマンドを使用します。

sudo du -sh /var/lib/docker/containers/*/*.log

このコマンドでログファイルのサイズがどの程度かを把握できます。

docker-compose のログ設定

docker-compose.yml でログを制限するには、各サービスの logging 設定を追加します。

例えば、ログの最大サイズを 10MB、保持するログのファイル数を 3 つに制限する場合、以下のように設定します。

version: '3.8'

services:
  my_service:
    image: my_image
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

この設定により、ログが 10MB に達すると新しいログファイルが作成され、最大 3 つのログファイルが保持されるようになります。

docker-compose.yml のログはどこに保存される?

docker-compose.ymllogging 設定を追加しても、ログの保存場所はデフォルトと変わりません。通常、各コンテナのログは以下のディレクトリに格納されます。

/var/lib/docker/containers/<container_id>/<container_id>-json.log

container_iddocker ps -a で確認できます。

このため、logging 設定を行っても、json-file ドライバを使用している限り、ログはこのディレクトリに保存され続けます。

他のログドライバの利用

Docker では json-file 以外にも以下のようなログドライバを使用できます。

  • syslog:システムの syslog に送る
  • journald:systemd の journal に送る
  • fluentd:Fluentd に送信
  • awslogs:AWS CloudWatch Logs に送信
  • none:ログを無効化

例えば、syslog を使用する場合は以下のように設定します。

logging:
  driver: "syslog"
  options:
    syslog-address: "udp://192.168.1.100:514"

ログの定期的なクリア

すでに肥大化したログを削除する場合、以下のコマンドでログファイルをクリアできます。

echo "" | sudo tee /var/lib/docker/containers/*/*.log

また、cron を利用して定期的にログを削除することも可能です。

まとめ

  • Docker のデフォルトではログが無制限に溜まるため、設定を見直す必要がある
  • docker-compose.ymllogging 設定で max-sizemax-file を指定する
  • 設定を追加してもログの保存先は変わらず /var/lib/docker/containers/ 配下
  • syslog などの外部ログ管理システムと連携するのも一つの方法
  • 既存のログを削除・管理することでディスク容量を節約できる

Docker を運用する際は、適切なログ設定を行い、ディスク容量を効率的に使いましょう!

2025-04-20サーバ&テクノロジ

Posted by 納戸 工房