開発環境でdocker compose up --build を実行すると上記エラーに出くわすことがあると思います。
その際の備忘として記載します。
原因
ディスクの容量不足
- failed to solve: failed to register layer
→解決できなかった問題:レイヤーの登録に失敗
- no space left on device
→デバイスに空き容量がない
Dockerはイメージをビルドするとき、複数のレイヤーを用いて最終的なイメージを作成しますが、新しいレイヤーを登録する際にdockerを利用している環境に容量がないことでこけています。
対策
ディスクの容量を確保する
開発用のWEBサーバーで諸々調整しながら、開発していると利用していないリソースが気づかないうちに溜まってディスクを逼迫します。
以下のコマンドでDockerシステム上の未使用リソースを一括で削除することができます。
docker system prune -a
対象リソース
- 停止しているすべてのコンテナ
- ネットワークで使用されていないネットワーク
- ダングリング(未使用)イメージとビルドキャッシュ
- 未使用のイメージ(-aオプションにより)
注意: このコマンドは、現在実行中のコンテナに関連していないすべてのリソースを削除するため、使用する際は注意が必要です。
もし上記を実行後に再発するようであれば、df -hを実行して、ディスクの使用状況自体を確認するアプローチが必要です。
df
: "disk free"の略で、ディスクの空き容量を表示します。-h
: "human-readable"の略で、容量を読みやすい形式(GB, MB等)で表示します。
容量が足りない場合には、ディスク自体を増やしたり、利用しているDocker Imageを軽量なもの(Alpineや-slimがついているImage)を利用することで解消することをできます。
まとめ
コマンドラインでやっていると、DockerDesktopみたいにリソースが可視化されていないので、ついクリーンアップ漏れが起こったりしてしまいますね。
以上、どなたかのお役に立てば幸いです。