【Docker】no space left on deviceで起動出来ない場合の対処法

どーも!

たかぽんです!

先日dockerを起動しようとしたら起動が出来ない事態に遭遇しました。

初めてのことだったので戸惑ったんですが、解決出来たので忘備録としてメモしておきます!

なにがあった?

普段Dockerを使って開発をしている人は以下のコマンドをよく使うと思います。

docker-compose up

ただ、ある日突然以下のようなエラーになるようになったんです。

ERROR: Service 'hoge' failed to build: failed to copy files: failed to copy directory: Error processing tar file(exit status 1): write hoge/huga/..... no space left on device

何やってるか正直いまいちわかってないんですが、ようはディレクトリのコピー中にデバイスの空き容量が足りなくなったぞ〜ってことだと思います。

そこで、そんなにファイルとか溜まってたっけ〜・・・?

って、Macの空き容量を見たら全然空き容量は問題なさそうで...

ん〜?

ってなりました...

原因は何だった?

この現象の原因としてはここで表しているdeviceはDocker側で確保しているdiskのことをさしていたようです。

実際にDockerのPreference(上部のツールバーにあるアイコンから開けます)のResourceをみると...

Disk imageがほぼusedになっていました。

実際の画面だとこんなやつです。

(画像は別PCのものなので、問題ない状態です)

どのタイミングで溜まっていくのかは把握出来ていないんですが、とりあえずこのusedを減らしてあげれば言い訳ですね。

対処法

対処法も様々あるようですが、僕の場合は以下のコマンドで解決しました。

docker image prune

これは、以下の公式ドキュメントにあるように...

The docker image prune command allows you to clean up unused images.

docker image prune コマンドは使用していないイメージを削除してくれます。

これは推測ですが、当時dockerの立ち上げ時に毎回オプションでビルドも行っていました(--build)。

docker-compose up -d --build

こんなコマンドをコードの変更のたびに動かして動作確認して〜を繰り返していました。

どうやらdockerでdocker-composeコマンドでビルドを行うと、毎回新しいイメージが作成されてしまうようです。

つまり、10回上記のコマンドを実行すると10個別の(でも中身はほとんど一緒の)イメージが作成されるわけですね。

そのせいでdiskが圧迫されて先に述べたエラーが発生したようです。

そこで、もう使っていないイメージを先ほどのpruneコマンドで削除してあげればいいわけですね!

実行すると削除する量によっては結構時間がかかりますが...(筆者は30GB程度削除するのに5~10分程度かかった気がします)

これで削除が終わった後に再度buildをすると無事通りました!

まとめ

Docker周りはまだまだ理解が浅いので、しっかり理解したいところです...

毎回実行するたびに新しいイメージが作られてしまうのなんとか出来るんだろうか・・・

そのうちdockerについて調べることがあればついでに調べたいですね...!

また暇があれば調べます!(オプションとかで出来そうな予感はする...!)

それでわ!

おすすめの記事