IT

【Docker】failed to solve: failed to register layer〜no space left on deviceと言われたら

開発環境で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みたいにリソースが可視化されていないので、ついクリーンアップ漏れが起こったりしてしまいますね。

以上、どなたかのお役に立てば幸いです。

  • この記事を書いた人

緑川縁

ニートからシステムエンジニアになった人
クラウド案件をメインにやっています。
保持資格:CCNA,AWS SAA&SAP,秘書検定2級
趣味でボカロ曲作り始めました。

-IT
-