docker: no space left on device の対処

結論を先に。このエラーは、Dockerが使うディスク領域が、未使用のイメージ・停止コンテナ・ビルドキャッシュ・ボリュームで埋まっている状態です。docker system prune で不要なものを削除すれば空きが戻ります。

write /var/lib/docker/...: no space left on device

原因

Dockerはビルドやpullのたびにイメージ層やキャッシュを溜め込みます。古いイメージ、終了済みコンテナ、ダングリング層、未使用ボリュームが積み上がってディスクを食い尽くすと、新しいbuildやpullが書き込めずこのエラーになります。

対処

  1. まず何がどれだけ使っているかを確認する。
Terminal window
docker system df
  1. 未使用のコンテナ・イメージ・ネットワーク・ビルドキャッシュをまとめて削除する。
Terminal window
docker system prune -a
  1. ボリュームは上のコマンドでは消えない(データ保護のため)。不要と分かっているなら個別に削除する。
Terminal window
docker volume prune
  1. ホスト自体の空きも確認する。Dockerの領域ではなくOSのディスクが満杯なこともある。
Terminal window
df -h

まとめ

  • 原因は未使用イメージ・コンテナ・キャッシュによるディスク逼迫
  • docker system df で使用量を把握する
  • docker system prune -a でまとめて回収
  • ボリュームは prune 対象外なので必要なら個別に、ホストは df -h で確認