Dockerのログ確認とローテーション|docker logs・ログ肥大化対策
Dockerのログが出ない・ログ容量が増え続ける場合に、ログの取得先と保存方式を調べ、ローテーション設定を設計する運用ガイドです。ログ削除前にアプリとdaemonの保持方法を切り分けます。
この記事の目的
docker logsとDocker Engineのログ保存方式の違い、既存コンテナへの設定反映条件を理解します。
最初にやること
docker logsで直近ログを確認し、docker inspectで対象コンテナのログドライバーを調べます。
web01などのコンテナ名、Composeサービス名・ポートは例です。Docker context・ホスト・保存先を実環境で確認してください。関連するガイド
Dockerの基本操作ガイド
コンテナの状態確認、起動・停止、接続先の基本操作へ戻ります。
記事を読む →DockerDockerコンテナ起動失敗
Exited・Restarting・OOMKilledなどの終了原因を切り分けます。
記事を読む →DockerDocker Compose設定と安全な反映
対象と原因を絞り、変更前後の確認手順へ進みます。
記事を読む →1. docker logsでログを見る
コンテナ名は実環境へ置き換えます。docker logsは通常stdout/stderrに出たログを扱います。アプリが内部ファイルのみにログを書いている場合、何も表示されないことがあります。
2. ログドライバーを確認
| ドライバー | 特徴 | 注意 |
|---|---|---|
json-file | JSON形式のログを保存 | ローテーション設定が必要な場合がある |
local | Docker管理の効率的なログ形式 | 既定でローテーション制限あり |
none | Docker側で収集しない | 別のログ経路が必要 |
ログドライバーによってはdocker logsが使えないか、読み出しキャッシュの制約があります。Docker Root Dirが/var/lib/docker以外の構成もあります。
3. json-fileの保存上限設定例
以下は/etc/docker/daemon.jsonの設定例です。既存設定・構成管理・保持要件と照らしてから変更します。
log-optsでは値を文字列として書きます。daemon設定変更は、基本的に変更後に作成するコンテナに適用され、既存コンテナが自動的に新しいログ設定へ変更されるわけではありません。
4. 症状から確認先を選ぶ
| 症状 | 次の確認 |
|---|---|
| ログが空 | アプリのstdout/stderr、ログ設定、コンテナの稼働状態を調べる |
| ログが多い | 出力量、繰り返す異常、保持期間・ローテーション条件を調べる |
| ホストの空きがない | No space left on deviceの原因確認 |
| コンテナが再起動を繰り返す | 起動失敗とRestartingの調査 |
| journalが増えている | systemd journalの容量調査 |
5. 手動削除を避ける理由
*-json.logをrmで消したり手動でtruncateしたりする運用は推奨しません。ログ管理との不整合や証跡喪失のリスクがあります。ログの保持期間・集中ログ送信先・容量監視と組み合わせ、設定適用後はテストコンテナのログ取得とローテーションを確認します。
関連する確認手順:Volume・永続データの確認。
6. ログの観測結果ごとの次の行動
ログが空、ログが増えすぎる、読み出せないという症状では対処が異なります。アプリがstdout/stderrへ出しているか、Dockerのログドライバーが何かを最初に確認します。
| 確認した結果 | 次にすること |
|---|---|
json-fileで上限未設定 | 必要な保管期間・監査要件を確認し、ローテーション上限と外部保管先を設計する |
json-fileで上限設定済み | 上限値とログ生成量、ホスト空き容量を確認。容量不足が続くなら別の消費源を調べる |
local | 既定のローテーションとアプリのログ取得手段を確認。機械的にjson-fileへ切り替えない |
noneやdocker logsが空 | アプリのstdout/stderr・ログ集約先・driverの読み出し可否を照合する |
| ホスト容量不足 | ディスク容量とinodeの調査へ進み、Dockerが管理するログを手動削除しない |
7. ログ設定の安全な変更判定
daemon全体の既定値を変える前に、ログ保持要件と既存コンテナの個別設定を調べます。既存コンテナへdaemonの新しい既定ログ設定が自動適用されるわけではありません。daemon.jsonの編集やdaemon再起動を、容量不足への無条件な対処として案内しません。
| 結果 | 次の判断 |
|---|---|
| 候補JSONが不正・daemon設定が競合 | 反映を中止。候補ファイルと起動オプションの不整合を管理者が修正 |
| 候補設定は妥当だが既存コンテナが旧設定 | 正常な可能性。新規コンテナだけに反映される条件を確認し、既存サービス再作成は別変更として計画 |
| ログが取得できない/外部へ送信されない | ログドライバー・転送先・アプリ出力を確認し、監査ログの欠落がないか検証 |
| daemon設定変更後に起動障害 | 既存設定の管理元へ戻し、daemonログ・接続可否・サービス公開範囲を再確認。復旧操作は管理者承認下で実施 |
検証用コンテナのローテーション結果だけでは、本番ホストの保持期間やログ転送の正常性までは保証されません。dockerdによる構成検証はdaemonホスト側で実行するもので、リモートDocker CLI経由の検証ではありません。
8. 検証用コンテナで設定反映と保存上限を確かめる
次の操作は検証環境でのみ実行する例です。イメージ取得・コンテナ作成・ログ出力を伴うため、権限・空き容量・ネットワークを確認してください。Docker daemon全体の設定を先に変更する必要はありません。
ローテーションが発生していれば、設定した保存上限のため過去の全2000行は保持されません。ただし、行数だけでバイト単位の上限や他のドライバーの挙動を証明することはできません。コマンドが失敗した場合は標準エラーも確認し、Docker管理下のログファイルを手動削除せず、保管要件に従って検証します。
| 結果 | 完了条件・対処 |
|---|---|
inspectに指定値が表示され、docker logsも参照できる | 検証コンテナへの設定適用は確認。保持制限の有効性と実際のディスク使用量を継続確認 |
| 既存サービスは以前の設定のまま | 正常な仕様上の挙動。業務影響・保存データ・イメージを確認してから再作成計画を立てる |
| 期待ログが取得できない | 外部ログ集約・アプリ出力先・ドライバー仕様を見直し、変更をいったん止める |
| 上限を設定しても容量が減らない | 別領域の消費、既存コンテナの古い設定、ログ生成量を確認する |