docker build で「no space left on device」が出てビルドできない
BuildKit のキャッシュ層や停止中コンテナ、dangling ボリュームが溜まるとビルドストレージが枯渇する。
docker system df で内訳を見て docker builder prune / docker system prune で掃除、Docker Desktop は仮想ディスク上限を引き上げる。
#docker#build#disk#prune#buildkit
要約
no space left on device の多くは BuildKit のキャッシュ層 か 未使用イメージ・ボリューム が溜まったことが原因。docker system df で内訳を確認し、docker builder prune / docker system prune --volumes で削る。
Docker Desktop は仮想ディスク自体の上限に当たっている場合があるので、設定でサイズを引き上げる。
よくある原因
- BuildKit キャッシュの肥大化: マルチステージビルドや CI を繰り返すと
buildxのキャッシュレイヤが GB 級に膨らむ。 - 停止コンテナ・dangling イメージ:
docker compose upを何度も使い回し、停止コンテナや未参照イメージが残り続けている。 - Docker Desktop の仮想ディスク上限: macOS / Windows の Docker Desktop は仮想ディスクで動くため、ホスト側ストレージに余裕があっても先に仮想ディスクが詰まる。
- /var/lib/docker が OS と同居: Linux ホストで
/var/lib/dockerが/と同パーティションだと、OS ログや他用途のファイルと容量を取り合う。
解決策
1. 内訳を確認する
docker system df -vBuild Cache / Images / Containers / Local Volumes のどれが太っているかを把握する(公式の Prune ガイド)。
2. キャッシュを削る
docker builder prune -af # BuildKit のビルドキャッシュ全削除
docker system prune -af --volumes # 停止コンテナ・未使用イメージ・dangling ボリュームを一括-a は使われていないイメージも対象、--volumes は dangling ボリュームを含む。
本番運用環境ではボリュームの扱いに注意。buildx prune の公式 も合わせて確認。
3. Docker Desktop の仮想ディスクを広げる
Settings → Resources → Disk image size を実用値(例 128GB)に上げて Apply & Restart。
狭いままだと prune してもすぐ詰まる。
4. data-root を別パーティションに移す
Linux ホストでは /etc/docker/daemon.json に書く:
{ "data-root": "/mnt/docker-data" }systemctl restart docker で反映。
既存イメージは引き継がず作り直す。