> **3行要約** > > * Dockerコンテナのコンソールログは、システム**メモリではなくホストのディスクにファイルとして保存**されます。 > * `docker logs`コマンドは、この保存されたファイルを読み込んで表示する役割を担っています。 > * ログファイルが無限に肥大化するのを防ぐためには、**ログローテーションオプション(`max-size`、`max-file`)を設定**することが非常に重要です。 ## 1\. ログはどこに、どのように保存されるのか? {#sec-37c2a29cff35} [[Docker]]は、コンテナの標準出力(stdout)と標準エラー(stderr)ストリームを両方キャプチャし、**ロギングドライバー(Logging Driver)** を介して処理します。特別な設定を行わない限り、Dockerはデフォルトで`json-file`ロギングドライバーを使用します。 * **保存場所**: コンテナのログは、ホストシステムの特定のパスにJSON形式のファイルとして保存されます。一般的なパスは以下の通りです。 * `/var/lib/docker/containers/[コンテナ_ID]/[コンテナ_ID]-json.log` * **`docker logs`コマンド**: このコマンドは、実際にはメモリ上の内容を表示しているのではなく、上記で述べたJSONログファイルを読み込んでターミナルに表示するものです。 ![ChatGPTイメージ 2026年5月12日午後12時37分29秒](/media/whitedec/blog_img/ff3498a786c645ecb031d714a053d4a4.webp) ## 2\. ログが蓄積し続けると、ディスク容量は不足しないのか? {#sec-4e6257ec2aba} はい、その通りです。何も対策を講じないと、ログファイルは肥大化し続け、ホストのディスク容量をすべて占有してしまう可能性があります。これを防ぐため、Dockerはログファイルのサイズと数を制限する**ログローテーション(Log Rotation)** オプションを提供しています。 例えば、`docker run`コマンドを実行する際に、以下のオプションを追加することができます。 ``` docker run -d \ --log-driver json-file \ --log-opt max-size=10m \ --log-opt max-file=3 \ nginx ``` * `--log-opt max-size=10m`: ログファイル1つあたりの最大サイズを**10MB**に制限します。 * `--log-opt max-file=3`: ログファイルの最大数を**3個**に制限します。3個を超えると、最も古いファイルから削除されます。 このように設定することで、該当コンテナのログは最大30MB(10MB × 3個)までしかディスクスペースを使用しなくなります。 *** ## 3. `docker-compose.yml`ファイルに設定する {#sec-890442ea3ac0} Docker Composeでは、`docker-compose.yml`ファイル内で各サービスごとにロギングオプションを非常に簡単に設定できます。 `docker run`コマンドの`--log-opt`フラグがYAML形式で記述されると考えると良いでしょう。 以下は、`my-app`というサービスにログローテーションを適用する例です。 ``` services: my-app: image: your-app-image # ... 他の設定 ... deploy: resources: limits: memory: 512M # 👇 この部分がログ設定です。 logging: driver: "json-file" # 使用するロギングドライバー(デフォルト値なので省略可能) options: max-size: "10m" # ファイルあたりの最大サイズ: 10MB max-file: "3" # 最大ファイル数: 3個 ``` * **`logging`**: 該当サービスのロギング設定を開始するキーです。 * **`driver`**: 使用するロギングドライバーを指定します。`json-file`がデフォルト値です。 * **`options`**: ドライバーに渡すオプションを設定します。 * **`max-size`**: `docker run`の`--log-opt max-size`と同じです。 * **`max-file`**: `docker run`の`--log-opt max-file`と同じです。 これで`docker-compose up`でこのサービスを開始すると、`my-app`コンテナのログは自動的にローテーションされ、最大30MB(10MB × 3個)のディスクスペースのみを使用するようになります。 ## 4\. すべてのコンテナにデフォルト設定を適用する {#sec-1a0729e53c34} もしすべてのコンテナにいちいちオプションを設定するのが面倒で、システム全体にデフォルトポリシーを適用したい場合は、**Dockerデーモン(Daemon)設定**ファイルを修正する方法が最も良いでしょう。 1. `/etc/docker/daemon.json`ファイルを開くか作成します。(ファイルが存在しない場合は新規作成してください。) 2. 以下のように内容を記述します。 ```json { "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" } } ``` 3. Dockerデーモンを再起動します。 ```bash sudo systemctl restart docker ``` このように設定することで、今後作成される**すべてのコンテナ**は、別途ロギング設定を行わない限り、自動的にこのポリシーに従うようになります。もちろん、`docker-compose.yml`ファイルや`docker run`コマンドで特定のコンテナに対して異なるロギングオプションを指定した場合、**個別の設定がデーモン設定よりも優先**されます。 * **個別のサービス設定**: `docker-compose.yml`ファイル内の`logging`セクションで設定するのが最も一般的で便利です。 * **グローバルなデフォルト設定**: サーバーのすべてのコンテナに一括したポリシーを適用するには、`/etc/docker/daemon.json`ファイルを修正してください。