【Docker】ディスクが増える原因の特定
この記事で解決できること
- Docker環境でディスク使用量が増えたとき、どこが増えているか特定できます
docker system dfで「イメージ/コンテナ/ボリューム」のどれが原因か当たりを付けられます- 削除で事故る前に、まず"安全に確認する手順"が分かります
💡 結論(最短)
Dockerのディスク増加は、まずこれで切り分けるのが最短です。
df -hで埋まっている領域を確認docker system dfで Docker がどれだけ使っているか確認docker system df -vで内訳の当たりを付ける- ログ肥大(コンテナログ)とボリューム肥大のどちらかを疑う
※ この記事は「特定」までに寄せます。削除は事故りやすいので慎重に進めます。
⚠️ 前提(対象環境)
- OS:Ubuntu
- Dockerが導入済み
- 権限:Docker操作のため
dockerが使えるユーザー、またはsudoが使える想定
1. まず本当にディスクが埋まっているか確認(df)
Dockerが原因かどうかの前に、どこが埋まっているかを確認します。
$ df -h
よくある例
/が満杯(Dockerのデータがルート配下にあることが多い)/varが別パーティションで満杯(/var/lib/dockerが効いている可能性)
2. Dockerがどれくらい使っているかを見る
まずは全体の当たりを付けます。
$ docker system df
注目する項目
Images:イメージが溜まっていないかContainers:停止コンテナが溜まっていないかLocal Volumes:ボリュームが肥大していないかBuild Cache:ビルドキャッシュが溜まっていないか
💡 "どれが大きいか" が分かるだけでも、次の調査が一気に楽になります。
3. どのデータが増えているかの当たりを付ける
Dockerのデータは典型的にはここにあります(環境により異なる場合があります)。
- Docker本体データ:
/var/lib/docker - コンテナログ:
/var/lib/docker/containers/<container-id>/*.log
まずは /var/lib/docker のサイズを確認します。
$ sudo du -h -d 1 /var/lib/docker | sort -h
💡 ここで /var/lib/docker が大きいなら、Docker起因の可能性が高いです。
4. コンテナログ(jsonログ)が肥大していないか確認
Dockerはデフォルトでコンテナの標準出力/標準エラーをログとして溜めます。ログが出続けると、ここが膨らみます。
4-1. containers 配下のサイズを見る
$ sudo du -h -d 2 /var/lib/docker/containers | sort -h | tail -n 20
4-2. 大きいログファイルを探す(上位20件)
$ sudo find /var/lib/docker/containers -type f -name "*.log" -printf "%s %p\n" | sort -n | tail -n 20
💡 ここで巨大な *-json.log が見つかったら、ログ肥大が原因候補です。
5. どのコンテナが原因か特定する
ログパスに含まれるコンテナID(長い文字列)から、コンテナ名を引けます。
5-1. コンテナ一覧を表示(IDと名前)
$ docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Image}}"
5-2. あるコンテナIDの詳細を見る
$ docker inspect <container-id> --format '{{.Name}}'
※ .Name は先頭に / が付くことがあります。
6. ボリュームが肥大しているか確認
DBやWordPressのアップロード、キャッシュなどはボリュームに溜まりがちです。
6-1. ボリュームの一覧
$ docker volume ls
6-2. どのボリュームを誰が使っているか
$ docker ps -a --format "table {{.Names}}\t{{.Mounts}}"
💡 ここで「どのコンテナがどのボリュームを掴んでいるか」の方向性が見えます。
7. 事故らないための注意点(重要)
❌ いきなり docker system prune を叩かない
想定外に消えることがあります。
❌ ボリュームは慎重に
ボリュームはデータ本体のことが多い(DB/WordPress等)。消すと復旧が大変です。
⚠️ ログ肥大は根本原因の調査が必要
ログを出している原因が残っていると再発します。
応急処置の考え方
もし原因がログ肥大だった場合の次の打ち手は、だいたいこのどれかです。
- ログローテーション設定(Dockerのlogging driver / log-opts で上限)
- アプリ側のログ量の見直し(エラー連発やデバッグログ)
- 監視/収集(必要なログは別経路に流す)
💡 削除での対処は "一時しのぎ" になりがちなので、原因を止める方が長期的に安定します。
確認(直ったかチェック)
調査や応急対応の後は、まずここで改善を確認します。
$ df -h $ docker system df
📋 検証環境
本記事のコマンドは Ubuntu 24.04 LTS / Docker 24.x で動作確認済みです。