本ページはプロモーションが含まれています

Docker

docker pruneの使い方|image・builder別と全6種

CATEGORY
REV.
DRAWN BY
TOM
SHEETS
9枚
prune(image・builder別と全6種)

トム

SESで約8年、環境を変えられないもどかしさの中にいました。32歳で自社開発企業に転職し、今はClaude Codeと自動化で、仕事も時間も組み直している途中です。
・Javaバックエンドエンジニア(Java歴12年以上)
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎
詳細なプロフィール

𝕏

docker pruneという単独コマンドはありません。

実体はimage・builder・system・container・volume・networkの6種類に分かれたコマンド群です。

対象を間違えると、必要なデータまで消えます。

私はJavaバックエンドエンジニアとして日常的にDockerを使っており、容量逼迫のたびにdocker pruneに助けられてきました。

実際にdocker system prune -a --volumesで30GBを回収した実測データ(Docker Desktop 4.29系、オプションは公式ドキュメントで確認済み)も紹介します。

この記事でわかること

  • 6種類のdocker pruneコマンドの違いと目的別の使い分けがわかる
  • docker system dfで削除前に安全確認できる
  • --filterオプションで「消したくないもの」を守りながら掃除できる
  • cronを使ったクリーンアップ自動化を設定できる

PARTS LIST /目次

docker pruneとは?不要リソース削除

docker pruneとは、Docker環境内に溜まった不要なリソースを一括削除するコマンド群の総称です。

開発を続けると古いコンテナ・使われていないイメージ・ネットワーク設定が蓄積します。

手動で消すのは手間ですが、docker prune系コマンドなら定義済みの条件で不要データだけを判別し一括削除できます。

docker pruneとdocker system pruneの違い

docker pruneという単独コマンドは存在しません。実際には対象を指定して実行します。

具体的にはdocker container prune・docker image prune・docker volume prune・docker network prune・docker builder pruneの5つです。

一方、docker system pruneは停止中のコンテナ・未使用ネットワーク・ぶら下がりイメージをまとめて一括削除する強力なコマンドです。

個別に判断するのが面倒な場合に重宝しますが、意図しないリソースまで消える可能性があるため、両者の違いを把握しておきましょう。

docker pruneの削除対象4種類

pruneコマンド群で削除対象となるデータは、主に以下の4種類です。

  • 停止中のコンテナ:実行が終了し、再度起動されていないコンテナ。プロセスが終了してもディスク上に残り続け、数が増えると無視できないサイズになる
  • 未使用イメージ(dangling image):新しいイメージをビルドした際に古くなり、タグが外れたイメージ。<none>というタグで表示され、完全に不要なデータ
  • 未使用のネットワーク:どのコンテナからも参照されていないネットワーク設定。容量への影響は小さいがIPアドレスの割り当て範囲を占有する
  • ビルドキャッシュ:イメージ作成時に生成された一時ファイル。長期間の開発で数十GBに達することも珍しくない

停止コンテナやぶら下がりイメージは、削除しても現在の稼働環境には影響を与えません。

ただし、後でログを見返したい停止済みコンテナがある場合は注意が必要です。

docker system dfで使用量確認

pruneを実行する前に、まず現状を把握しましょう。

docker system dfコマンドを使えば、Dockerが使用しているディスク容量をリソース別に一覧表示できます。

docker system df

出力例は以下のようになります。

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          15        3         8.2GB     6.5GB (79%)
Containers      8         2         1.1GB     950MB (86%)
Local Volumes   5         2         3.2GB     2.1GB (65%)
Build Cache     0         0         12.4GB    12.4GB

「RECLAIMABLE」列が、pruneで回収できる容量です。この例ではビルドキャッシュだけで12.4GBが回収可能とわかります。

pruneの前後でこのコマンドを実行すると、どれだけの容量を確保できたかを確認できます。

docker pruneを使うタイミング|容量80%が目安

docker pruneコマンドは、ディスク容量が逼迫(ひっ迫)したときに真っ先に使うべきです。

Dockerが生成するデータは、意識して管理しない限り増え続けます。

CI/CDパイプラインで何度もビルドを繰り返すサーバーや、頻繁にイメージをプルする開発端末では、数週間で数GBのゴミデータが溜まります。

定期メンテナンスとして週1回、またはディスク使用率80%超を閾値に運用するのが理想です。

コンテナ・イメージ・ネットワークといった概念からKubernetesとの関係まで体系的に押さえておきたい方には、こちらの書籍も参考になります。

docker prune全6コマンドの使い分け一覧

6つのprune系コマンドは、削除対象・容量への影響・誤削除時のリスクがそれぞれ異なります。次の一覧表で違いを押さえてから、個別の使い方を確認していきます。

コマンド削除対象容量への影響リスク
docker container prune停止中のコンテナ中低
docker image prune未使用イメージ(dangling)大低
docker builder pruneビルドキャッシュ(新規はdocker buildx prune)大低
docker network prune未使用ネットワーク小低
docker volume prune未使用ボリューム大高
docker system prune上記を一括(volume除く)大中

docker prune all・cleanupの別名コマンド

検索でよく見かける次の名前は、正式なコマンド名とは別物です。どれも実際の環境で打つのは、右側のコマンドです。

  • docker prune all:このコマンドはありません。全部まとめて消したいときはdocker system prune -aです(名前付きボリュームは消えません)
  • docker images prune:正しくはdocker image prune(imageは単数形)。docker images pruneと打つと、イメージ一覧のフィルタとして扱われ、何も削除されません
  • docker cleanup・docker purge:どちらも「not a docker command」になります。掃除はprune系で行います
  • docker buildx prune:docker builder pruneと同じビルドキャッシュ削除です。buildxが入っている環境ではdocker builder pruneもこのコマンドとして動くため、新しいオプションはどちらでも使えます(詳しくは後述)

docker container pruneの使い方

停止しているコンテナだけを削除したい場合は、以下のコマンドを使います。

docker container prune

実行すると「本当に削除しますか?」と確認プロンプトが出ます。y入力で削除が始まります。

実行結果には、削除されたコンテナのID一覧とともに、確保できたディスク容量(Total reclaimed space)が表示されます。

開発中に「コンテナ名が重複しています」というエラーが出た場合など、コンテナだけを一掃したいときに便利です。

あわせて読む

docker image pruneの使い方と-a・--filter

不要なイメージを削除するには、以下のコマンドを使います。

docker image prune

デフォルトでは、タグのない「ぶら下がりイメージ」のみが削除されます。

タグが付いていても現在使われていないイメージをすべて削除したい場合は、-aオプションを付けます。

docker image prune -a

-aオプションは強力です。過去にプルしたubuntuやnodeなどのベースイメージもすべて消えます。

次回使うときに再度ダウンロードが必要になるため、通信環境が悪い場所で実行する際は注意してください。

docker builder pruneでビルドキャッシュ削除

ビルドキャッシュのみを削除したい場合は、docker builder pruneコマンドを使います。

docker system pruneよりも影響範囲が狭く、ビルドキャッシュだけをピンポイントで削除できます。

docker builder prune

全キャッシュを削除したくない場合は、--filterオプションで期間を絞れます。以下は1週間以上前のキャッシュのみ削除する例です。

docker builder prune --filter until=168h

最近のビルドキャッシュを残しつつ古いキャッシュだけを削除できます。CI/CDサーバーでビルド速度を維持しながら容量を節約したい場面で効果的です。

また、--keep-storageオプションを使えば、保持するキャッシュサイズの上限を指定できます。

docker builder prune --keep-storage 5GB

ただし --keep-storage は非推奨です。代わりに --reserved-space(予約サイズ)・--max-used-space(上限サイズ)・--min-free-space(目標空き容量)に置き換わりました。--max-used-spaceと--min-free-spaceはbuildx 0.18.0(2024年10月30日リリース)で追加され、BuildKit 0.17.0以降のビルダーが必要です。「Docker 25.0以降」という記載を見かけますが、buildxとBuildKitのバージョンに依存します。厳密にはDocker Engineの世代ではなく、buildxのバージョンで判断してください。

2026年8月時点(Docker Engine 29.7系)で新規に書くコマンドは docker buildx prune --reserved-space 5GB を推奨します。

docker buildx pruneとbuilder pruneの違い

docker builder pruneは昔からある基本コマンドです。現在のDockerでは、内部的にbuildx経由でBuildKitのキャッシュを操作しています。buildxプラグインが入っていない環境があります。そうした環境やDOCKER_BUILDKIT=0を設定している環境では、「DEPRECATED: The legacy builder is deprecated…」という警告が表示されます。

一方docker buildx pruneはbuildxネイティブのコマンドで、--reserved-spaceや--max-used-spaceなど新しいオプションを持ちます。buildxが入っている環境では、docker builder pruneもこのコマンドに転送されるため同じオプションが使えます。buildxを介さない旧実装のdocker builder pruneで使えるのは--keep-storageまでです(--dry-runはbuildx pruneにも公式には実装されていません)。

docker builder prune と docker buildx prune の違い
LEGACY / 従来コマンドdocker builder prune内部的にbuildx経由でBuildKitキャッシュを操作。環境によっては非推奨警告が出るが動作は継続。既存スクリプトはすぐ書き換えなくてよい
RECOMMENDED / 推奨・新規docker buildx prunebuildxネイティブコマンド。--reserved-space等の新オプションを持つ。これから書くスクリプト・ドキュメントで優先
NOTEbuildx導入環境では docker builder prune も buildx prune に転送され、同じ実装・同じオプションで動きます。

これから新規に書くスクリプトやドキュメントではdocker buildx pruneを優先してください。

既存のスクリプトにdocker builder pruneが残っている場合は、次回の見直しタイミングで置き換えるのがおすすめです。

BuildKitが有効かどうかはdocker buildx versionコマンドで確認できます。

私としては、すでに動いている docker builder prune のスクリプトをこのためだけに急いで書き換える必要はないという結論に至りました。

--keep-storage は非推奨扱いになっただけで動作自体は継続しており、緊急性は低いためです。

docker volume pruneの使い方と注意点

ボリュームの削除は最も慎重に行ってください。

docker volume prune

ただし、このコマンドがデフォルトで削除するのは「匿名ボリューム」だけです。名前を指定せず作成され、どのコンテナからもマウントされていないものが対象になります(Docker Engine 23.0以降の挙動)。

docker-compose.ymlのvolumes:で名前を付けた「名前付きボリューム(named volume)」は、-a(--all)オプションを付けない限り削除対象になりません。

Dockerにおける「ボリューム」は、データベースのデータやアップロードされたファイルなど、永続化が必要なデータを保存する場所です。

誤って必要なデータベースのボリュームを削除すると、データは二度と戻りません。

コンテナを一時的に停止しているだけで、後でまた使う予定のボリュームであっても、docker volume pruneは容赦なく削除します。

明確な意図があるときだけ実行してください。

実務では docker volume ls で一覧を出し、各ボリュームを docker volume inspect <名前> で中身のマウントポイントを確認します。

直近で使われたかを判断してから実行するのが安全です。

実務では本番データベースのボリュームに docker volume create --label protect=db myvolume のように保護用ラベルを付けておく運用も有効です。

クリーンアップスクリプトで docker volume prune 相当の処理を --filter "label!=protect" と組み合わせれば、ラベル付きボリュームだけを削除対象から自動的に除外できます。

docker network pruneで削除

未使用のネットワーク設定を削除するには、以下のコマンドを使います。

docker network prune

docker compose(Docker Compose V2)で環境を立ち上げると、自動的に専用のネットワークが作られます。

docker compose down でコンテナを停止した後にネットワーク設定だけが取り残される場合があります。

ネットワーク設定自体はディスク容量をほとんど消費しません。

ただし、IPアドレスの割り当て範囲を占有するため、多数のネットワークが残っていると新しいネットワーク作成時にエラーが出ることがあります。

定期的に整理しておきましょう。

あわせて読む

docker system pruneの使い方|-aと--volumes

すべてをまとめてきれいにしたいときは、docker system pruneの出番です。

docker system prune

docker system pruneを実行すると、停止中のコンテナ、未使用ネットワーク、ぶら下がりイメージがすべて削除されます。

さらに、-aと--volumesオプションを組み合わせることで、Docker環境を「初期状態に近い形」までリセットできます。ただし--volumesで削除されるのも匿名ボリュームのみで、名前付きボリュームは対象外です。名前付きボリュームまで削除したい場合は、別途docker volume prune --allを実行してください。

docker system prune は未使用のビルドキャッシュも削除対象に含まれます(BuildKit有効時)。

ビルドキャッシュは数十GBに達することもあるため、回収容量が想定以上に大きくなっても慌てないでください。

docker system prune -a --volumes

ディスク容量不足を解消する最終手段です。影響範囲が広いため、実行前にはdocker system dfで削除対象を確認してから実行しましょう。

docker system prune で消えるもの・残るもの
リソース
system prune
system prune -a --volumes
停止中コンテナ
削除
削除
ぶら下がりイメージ
削除
削除
未使用ネットワーク
削除
削除
ビルドキャッシュ
削除
削除
未使用イメージタグ付きで使われていないもの(ubuntu等)
残る
削除
匿名ボリューム
残る
削除
名前付きボリューム
残る
残る
NOTE名前付きボリュームは、docker volume prune --all を別に実行しない限り残ります。

docker pruneの応用テクニック|dry-run代替と絞り込み

6つのpruneコマンドの基本を押さえたら、次に知っておきたいのが「実行前にどう確認するか」という運用面です。前述のとおりdocker buildx pruneに--dry-runオプションは存在しませんが、代替の確認手段はあります。ここではbuildx pruneの安全な事前確認方法と、消したくないリソースを守る--filterオプションの使い方を解説します。

docker buildx pruneのdry-run代替法

2026年9月時点、docker buildx pruneに--dry-runオプションは存在しません(公式リファレンスのオプション一覧は--all/--builder/--debug/--filter/--force/--max-used-space/--min-free-space/--reserved-space/--timeout/--verboseのみ)。

実削除せずに事前確認したい場合は、--max-used-spaceや--reserved-spaceで保持容量を指定したうえで、削除前後のdocker system dfを比較する方法が現実的です。

ほかのpruneコマンド(image・container・system・volume)のdry-run事情は、後述のFAQでまとめて解説しています。代替の確認方法もあわせて確認してください。

--filterオプションで削除対象を絞り込む方法

pruneコマンドには--filterオプションがあり、削除対象を条件で絞り込めます。全削除が怖い場合に活用してください。

時間指定(until):指定した時間より前に作成されたリソースだけを削除します。

docker image prune --filter "until=24h"

24時間以上前に作成されたぶら下がりイメージだけが削除されます。直近の作業分は安全に残せます。

ラベル指定(label):特定のラベルが付いたリソースを対象にしたり、除外したりできます。

docker image prune --filter "label!=keep"

keepラベルが付いたイメージは削除から除外されます。

CI/CD環境で「絶対に消したくないイメージ」にラベルを付けておけば、安全にpruneを実行できます。

図解中心でDockerの全体像をもう一度イメージからつかみ直したい方には、こちらの書籍もおすすめです。

docker pruneの注意点|3つのリスク

docker pruneは便利ですが、削除したデータは復元できません。以下の3つのリスクを事前に把握しておきましょう。

docker pruneで削除したデータは復元できない

Dockerの削除コマンドは、OSのゴミ箱機能とは異なります。

削除を実行した瞬間、Dockerはデータをファイルシステムから完全に消去します。「間違って消してしまったから元に戻す」という操作はできません。

データベースのデータや、コンテナ内で数時間かけて生成したログファイルが消えると、復旧に膨大な時間がかかります。

削除コマンド実行時はエンターキーを押す前に対象を必ず確認してください。

volumeが削除対象に含まれない理由

docker system prune(オプションなし)を実行しても、ボリュームは削除されません。

ボリュームがデフォルトで削除されないのは、Dockerの安全装置です。理由は以下の3点に集約されます。

・永続データを扱う場所
・一時的な実行環境と区別
・誤削除事故の防止

  • 永続データを扱う場所:データベースやアップロードファイルなど、失うと致命的なデータを保存している
  • 一時的な実行環境と区別:コンテナやイメージのような使い捨て前提のリソースとは性質が異なる
  • 誤削除事故の防止:意図せず重要データを消さないよう、明示的なオプション指定なしには削除対象に含まれない

Compose環境でのprune注意点

docker compose(Compose V2)で管理しているプロジェクトでは、docker compose downとpruneコマンドの役割の違いを理解しておきましょう。

docker compose downはプロジェクト内のコンテナとネットワークを停止・削除します。

--volumesを付けるとボリュームも、--rmi allを付けるとイメージも同時に削除されます。

一方、docker system pruneは全プロジェクトの未使用リソースをまとめて削除します。

そのため、他のComposeプロジェクトのリソースまで巻き込む可能性があります。

Composeプロジェクトのクリーンアップは、まずdocker compose downで当該プロジェクトのリソースを整理してください。それでもディスクが逼迫(ひっ迫)している場合にdocker system pruneを実行する順序が安全です。

docker pruneを安全に使うには?

docker pruneを安全に使うポイントは2つです。削除前にdocker system dfで対象を確認すること、そして--filterオプションで消したくないものを守ることです。

削除前にdocker system dfで対象を確認する

いきなり削除するのではなく、何が消えるのかを事前に確認してください(各コマンドのdry-run事情はFAQを参照)。以下の一覧表示コマンドで事前確認します。

トム
トム

実際の現場では削除前後でdocker system dfで比較して容量をログ記録するクセをつけると、トラブルが少ないですよ。

step
1
停止中のコンテナを確認する

現在停止中のコンテナを確認するには以下のコマンドを実行します。

docker ps -a --filter "status=exited"

step
2
ぶら下がりイメージを確認する

ぶら下がりイメージの一覧確認は以下で行えます。

docker images -f dangling=true

step
3
未使用ボリュームを確認する

未使用ボリュームの確認は以下です。

docker volume ls -f dangling=true

削除前後のディスク使用量を比較するには、前述のdocker system dfが役立ちます。

まずは一覧表示コマンドで対象を目視確認するのが最も確実な安全策です。

--forceを使うべきケースとNGケース

確認プロンプトをスキップする--force(または-f)オプションがあります。

--forceを使うべきケースは、スクリプトによる自動化を行う場合です。

深夜に実行するクリーンアップスクリプトや、CI/CDパイプラインのクリーンアップステップでは、ユーザーの入力を待てないため-fが必須です。

逆に、手動でコマンドを打つときに--forceを使うのはNGです。確認メッセージは、操作が正しいかを問いかける最後の砦(とりで)です。

わずか1秒の手間を惜しんで、数日分の作業データを失うリスクを冒す必要はありません。

volumeのバックアップ方法

ボリュームを削除する可能性がある場合、あるいは大規模な掃除をする前には、必ずバックアップを取りましょう。

最もシンプルなバックアップ方法は、一時的なコンテナを立ち上げて、ボリュームの内容をtarアーカイブとして書き出すことです。

docker run --rm -v ボリューム名:/data -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data

tarコマンドを実行すると、指定したボリュームの中身がbackup.tarとして現在のディレクトリに保存されます。

万が一データを消してしまっても、同じ手順で展開すれば元の状態に戻せます。

docker pruneをcronで自動化する手順

開発サーバーでは、定期的な自動削除を設定しておくと便利です。

Linux環境であれば、cronで定期実行を設定します。毎日深夜3時に不要なコンテナとイメージを削除するには、以下のような設定を追加します。

0 3 * * * docker system prune -f

ログをファイルに残しておくと、容量回収量の履歴を追えます。

0 3 * * * /usr/bin/docker system prune -f --filter "until=168h" >> /var/log/docker-prune.log 2>&1

Ubuntu 22.04 LTS / Docker 25.x 以降の CI サーバーで1年以上運用しました。

この設定で毎週平均 8〜12GB を回収できています。

--filter until=168h を付けて7日以内のキャッシュは残すことで、ビルド時間の悪化も抑えられます。

ここで-fオプションが役立ちます。ただし、-aオプション(全未使用イメージ削除)を付けると、ビルドキャッシュもすべて消えるため注意が必要です。

次回のビルド時間が大幅に増加する可能性があります。

必要なコンテナが停止したままになっていないか、運用ルールをしっかり定めておきましょう。

本番環境での自動化はリスクが高いため、まずは開発環境で試してから導入してください。

あわせて読む

実務で使うdocker prune自動化スクリプト例

私がCIサーバーとローカル開発機で実際に使っているクリーンアップスクリプトを紹介します。

単純なdocker system prune -fではなく、段階的に削除対象を絞り込む安全重視の構成です。

#!/bin/bash
# docker-cleanup.sh — 安全重視のクリーンアップスクリプト
set -euo pipefail

echo "=== Before ==="
docker system df

# 1. 停止コンテナ(7日以上前)のみ削除
docker container prune -f --filter "until=168h"

# 2. danglingイメージのみ削除(タグ付きは残す)
docker image prune -f

# 3. ビルドキャッシュは5GB残して削除
docker buildx prune -f --reserved-space 5GB 2>/dev/null \
  || docker builder prune -f --keep-storage 5GB

# 4. 未使用ネットワーク削除
docker network prune -f

# ボリュームは自動削除しない(手動確認必須)

echo "=== After ==="
docker system df

ポイントは3つあります。

  • ボリュームは絶対に自動削除しない
  • コンテナは7日以上前のものだけに絞る
  • ビルドキャッシュは5GB残してビルド速度を維持する

このスクリプトをcronで毎週日曜深夜に実行し、年間で約500GBのディスク容量を回収できました。

実測:docker system pruneで30GB回復

私の環境は、メモリ16GB / ストレージ512GB の MacBook Pro(Apple Silicon)です。計測当時のDocker Desktopは4.29系でした。3ヶ月間メンテナンスせずに放置した環境を計測した結果を共有します。

指標prune 前prune 後回収量
Images42 (18.4GB)5 (2.1GB)16.3GB
Containers23 (3.2GB)2 (0.4GB)2.8GB
Build Cache— (11.7GB)— (0.2GB)11.5GB
合計33.3GB2.7GB30.6GB

実行したコマンドは docker system prune -a --volumes ひとつだけです。

ボリュームは事前に docker volume ls で中身を全件確認し、DB用の2件は削除前にバックアップを取得したうえで実行しました。なおDB用の2件は名前付きボリュームでした。実際には-a --volumes単体では削除対象にならない構成でしたが(匿名ボリュームのみが対象のため)、念のためバックアップを取得しました。

ボリュームをpruneから保護したい場合は、作成時に docker volume create --label keep=true myvolume のようにラベルを付けておくのが有効です。

なお、この30GBの回収量は、Docker Desktop の Disk image size の縮小分です。「Clean / Purge data」を実行して反映させました。

docker pruneでトラブルが起きたら?3つの事例と対処法

docker pruneのトラブルで多いのは、イメージ消失・ボリュームのデータ消失・CI/CDでの誤実行の3パターンです。それぞれの原因と対処を順に見ていきます。

イメージが消えた/復元できない場合

必要なイメージを間違って消してしまった場合、慌てる必要はありません。

Dockerイメージはレジストリから再取得できます。

docker pullコマンドを実行するか、docker buildコマンドでビルドし直せば元通りになります。

ただし、ビルドには時間がかかるため、急ぎの作業がある場合は待機時間が発生します。

ローカルでしか作成していない独自イメージだった場合は、ソースコードから再度ビルドしてください。

volume削除によるデータ消失ケース

ボリューム削除によるデータ消失が最も深刻なケースです。

バックアップがない状態でボリュームを削除した場合、Dockerの機能だけでデータを復元できません。

OSレベルでのファイル復元ツールを使うか、クラウド環境であればスナップショットからの復元を試みてください。

Dockerのデータ領域は複雑な構造をしているため、復元成功率は高くありません。

CI/CDで誤ってpruneされた場合の対応

CI/CDパイプラインの中でpruneを実行し、必要なビルドキャッシュまで消してしまうトラブルもよくあります。

この場合、次回のビルド時間が極端に長くなるという症状が出ます。

私のチームでは、GitHub ActionsのワークフローにCI終了後のdocker system prune -fを入れたことがあります。

すると翌日のビルドが通常5分のところ25分かかり、全チームに影響が出ました。対策としては、pruneコマンドにフィルターを適用してください。

docker image prune --filter "label!=keep"

削除したくないイメージやコンテナにラベルを付けておき、フィルター機能で削除対象から除外する設定をパイプラインに組み込みます。

キャッシュ効率とディスク容量のバランスを保てます。

「no space left on device」が出たときの対処

no space left on deviceは、Dockerが書き込む先のディスクに空きがないときに出るエラーです。docker pull・docker build・docker compose upのどれでも起こります。

まず、どこの容量が足りないのかを切り分けます。pruneで消す前にここを押さえておくと、削っても直らない状況を避けられます。

原因の切り分け:どこの容量が足りないか

  • Linux(Docker Engine):Dockerの保存先を置いているパーティションの空きが不足している。保存先の既定は/var/lib/dockerで、空き容量だけでなくinode(ファイル数の上限)の枯渇でも同じメッセージになる
  • Docker Desktop(Mac/Windows):ホストに空きがあっても、仮想ディスクが上限に達すると出る。上限は設定の「Resources」にある「Disk image size」で、公式ドキュメントでは「エンジンが使えるディスク容量の最大値」と説明されている
  • Docker内の使い過ぎ:イメージ・ビルドキャッシュ・停止コンテナ・ボリュームが溜まっている。docker system dfで内訳が分かる

Linuxでは、次の2コマンドで容量とinodeを両方確認します。

# Dockerの保存先(既定は /var/lib/docker)の空き容量
df -h /var/lib/docker

# inode(ファイル数の上限)の残り
df -i /var/lib/docker

Use%が100%に近ければ容量不足、IUse%が100%に近ければinode不足です。inode不足の場合は、小さいファイルが大量に溜まっている場所(古いコンテナのログやビルドキャッシュなど)を減らす必要があります。

対処の手順:影響の小さい順に消す

内訳を確認してから、影響の小さいものを順に削除します。各コマンドの違いは前半の「docker prune全6コマンドの使い分け一覧」で説明した通りです。

# 1. 内訳を確認(-v で個別の一覧)
docker system df -v

# 2. 影響の小さいものから順に削除
docker image prune
docker builder prune
docker container prune

削除のたびにdocker system dfでRECLAIMABLEの変化を見て、空きが戻った時点で止めます。ボリュームの削除はデータが戻らないため、イメージ・キャッシュ・コンテナで足りないときの最後に回してください。

Docker Desktopでpruneしても容量不足が解消しない場合は、仮想ディスク側の問題です。後半の「Docker Desktopで容量が戻らない理由」で、Disk image sizeの扱いと容量を回収する手順を説明しています。

docker pruneによくある質問

docker prune全般について、読者からよく聞かれる質問をまとめました。容量が減らない・環境ごとの挙動の違い・存在しないコマンドとの混同など、実際に寄せられた疑問を中心に扱います。細かい手順や根拠は各見出しの本文もあわせて確認してください。

Q1. 実行しても容量が減らないのはなぜ?

A1. docker system pruneを実行してもディスク使用量があまり変わらない場合、原因は主に2つあります。

1つ目は、削除対象外のリソースが容量を食っている場合です。ボリュームや、稼働中のコンテナが出力し続けているログファイルはpruneでは消えません。

/var/lib/docker/containers以下のログサイズを確認してみてください。

2つ目は、Dockerが使用しているストレージドライバの仕組み(overlay2など)により、OS上での空き容量反映にラグがある場合です。

ファイルシステムの断片化が起きていることもあります。Dockerサービスを再起動すると解消する場合があります。

トム
トム

docker system prune -aで15GB回収されたはずがdf -hに反映されなかったことがあります。

そのときはsudo systemctl restart dockerを実行すると、一気に反映されました。

Q2. Docker Desktopで容量が戻らない理由

A2. Docker DesktopではLinuxサーバーと異なる挙動があります。全データは仮想ディスクとして格納されています。Macでは ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw、Windows(WSL2バックエンド)では %LOCALAPPDATA%\Docker\wsl\disk\docker_data.vhdx(古いバージョンでは %LOCALAPPDATA%\Docker\wsl\data\ext4.vhdx)です。

そのため docker system prune を実行しても、ホストOS側のファイルサイズはすぐには縮小しないことがあります。Docker公式のMac向けFAQには、2つの説明があります。1つはpruneの後にホスト側で空きが反映されるまで数分かかること、もう1つは多くのツールが実サイズではなく最大ファイルサイズを表示することです。実サイズは ls -klsh Docker.raw で確認できます。

すぐに回収したいときは、同FAQにある docker run --privileged --pid=host docker/desktop-reclaim-space で領域の回収を促せます。「Troubleshoot」→「Clean / Purge data」は全データを初期化する操作です。イメージやボリュームを残したいときには使わないでください。

Windows の場合は代わりに、管理者PowerShellで wsl --shutdown 後に Optimize-VHD -Path <パス> -Mode Full を実行する方法もあります。

prune 後にここで挙げた回収手順を踏むと、ホストOSの空き容量が増えます。

Q3. pruneしても動作に影響は出ない?

A3. 稼働中のコンテナには影響しません。削除されるのは現在使われていないリソースだけです。

ただし「今は停止しているが翌日起動する予定のコンテナ」は削除されます。コンテナは使い捨て前提の設計です。

設定をコンテナ内に直接書き込んでいると初期化される可能性があるため、データは必ずボリュームまたは永続ストレージに外出ししてください。

Q4. 本番環境で使っても大丈夫?

A4. 本番環境での実行は可能ですが、細心の注意が必要です。

本番でpruneを実行する際の鉄則は以下の3点です。

  • アクセスが少ない深夜帯に実行する
  • system prune -aのような広範囲な削除ではなく、対象を絞ったコマンドを使う
  • 高負荷時は避ける(削除処理でディスクI/Oが上昇し、応答速度が低下する場合がある)

万が一のオペレーションミスがサービス停止に直結するため、本番環境では慎重に操作してください。

私の経験では、本番環境でdocker system pruneを直接実行するよりも、前述のクリーンアップスクリプトのように対象を段階的に絞り込む方が事故率は圧倒的に低くなります。

そもそも本番でpruneが必要になる時点でディスク監視の閾値設計を見直すべき、というのが実務を通じての結論です。

Q5. docker purge・cleanupはある?

A5. 「docker purge」というCLIコマンドは存在しません。不要リソースを削除する正式なコマンドは本記事で解説してきたpruneです。

Linuxのapt purgeなど他ツールの用語と混同して検索されがちですが、docker purgeと入力しても「not a docker command」エラーになります。

なお、Docker Desktop(Mac/Windows)のトラブルシューティング画面には「Clean / Purge data」という機能があります。

こちらはpruneと違い、コンテナ・イメージ・ボリュームを含む全データを初期化する強力な操作です。ディスク容量の整理が目的なら、まずpruneコマンドから使うのが安全です。

Q6. 各pruneコマンドにdry-runはある?

A6. いいえ、2026年9月時点でdocker image prune・docker volume prune・docker system prune・docker buildx pruneのいずれにも公式の--dry-runオプションはありません。コマンドごとに以下の一覧表示コマンドで代替確認してください。

  • image prune:docker images -f dangling=trueで削除候補を一覧表示
  • volume prune:docker volume ls -f dangling=trueで削除候補のボリューム名を一覧表示し、必要に応じてdocker volume inspect <名前>で中身を確認
  • system prune:実行前にdocker system dfで内訳を控え、docker ps -a --filter "status=exited"・docker images -f dangling=true・docker volume ls -f dangling=trueを個別に確認してから判断

ボリュームは復元できない削除リスクが最も高いため、docker system prune単体では対象を確認せずに削除しないよう注意してください(ボリュームを含めるには別途--volumesの明示指定が必要です)。

Q7. docker compose pruneというコマンドはある?

A7. 「docker compose prune」というCLIコマンドは存在しません。Docker Compose(V2)のサブコマンド一覧にpruneはなく、実行すると「unknown command」エラーになります。

Composeプロジェクトの不要リソースを掃除したい場合は、docker compose down(コンテナ・ネットワークを削除、--volumesでボリュームも削除)を使ってください。あるいは、本記事で解説したdocker container prune・docker image prune・docker system pruneなどの通常のprune系コマンドも使えます。

まとめ:docker pruneで容量回復

Dockerのディスク容量不足は、docker prune系コマンドを使えば解決できます。

6つのpruneコマンドは、それぞれ削除対象が異なります。

対象を絞った個別コマンド(container / image / builder / network / volume prune)があります。まとめて削除するなら docker system prune です。目的に応じて使い分けてください。

安全運用のための4つのポイントを整理します。

  • まずは確認:docker system dfと一覧表示コマンドで削除前に何が消えるかを把握する
  • ボリュームは保護:DBなどの永続データはバックアップを取るまで消さない
  • フィルターを活用:--filter until=24hや--filter label!=keepで削除対象を絞り込む
  • 自動化は慎重に:開発環境で十分にテストしてから導入する
REVISIONS / 改訂履歴
REV.DATE内容
102026-10-20FAQ・JSON-LDの正確性を再検証し、長い見出しを短縮。段落の強調表示を追加
92026-10-15図解を描き直し(図面のデザインにそろえた)
82026-10-14雰囲気だけの挿絵を外した
72026-09-302026年9月時点の情報で全体を見直し
… ほか5回の改訂
12025-11-20初版
NEXT READ本棚から1本

AIで開発を組み直すなら、まずこの5冊から

入門・実践・設計まで、Claude Codeの本をレベル別に5冊選んで比べました。

→ おすすめ5冊を見る

  • この記事を書いた人
  • 最新記事

トム

SESで約8年、環境を変えられないもどかしさの中にいました。32歳で自社開発企業に転職し、今はClaude Codeと自動化で、仕事も時間も組み直している途中です。
・Javaバックエンドエンジニア(Java歴12年以上)
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎
詳細なプロフィール

𝕏

Docker