背景
Dockerを使って開発をしていると、たまに「no space left on device」というエラーメッセージに遭遇することがあります。
これはディスク容量不足が原因で発生するエラーで、特に大規模なプロジェクトを扱っているときに発生しやすい問題です。
この記事では、実際に私が遭遇した問題を元に、ディスク容量不足の解消方法について解説します。
エラーメッセージの概要
今回遭遇したエラーメッセージは次の通りです。
compile: writing output: write $WORK/b568/_pkg_.a: no space left on device
Go
アプリケーションをDockerコンテナ内でビルド中に発生しました。
これは、「ディスクに書き込む際に空き容量が足りない」という意味です。
なので、早速、ディスクの使用状況を確認してみました。
ディスクの使用状況を確認する
まず、ターミナルで df -h コマンドを実行して、システム全体のディスク使用状況を確認します。
df -h
出力結果は次のようなものでした。
Filesystem Size Used Avail Capacity Mounted on
/dev/disk3s5 460Gi 431Gi 10Gi 98% /
この結果から、/
ディレクトリに割り当てられているディスク容量が 98% 使用されており、空き容量がほとんどないことがわかります。ディスク容量不足が原因でエラーが発生していたことが確認できました。
ディスク容量を開放する方法
次に、ディスク容量を解放していくためにいくつかの手順を試しました。以下はその詳細です。
1. 不要なファイルを削除する
まずは、個人のホームディレクトリなどにある不要な大容量ファイルを削除しました。大きなファイルを確認するためには、次のコマンドが便利です。
du -sh ~/* | sort -h
このコマンドを実行すると、ホームディレクトリ内の各ファイルやフォルダのサイズを確認でき、不要なファイルを見つけて削除できます。
2. 古いログファイルやキャッシュを削除する
システムやアプリケーションのキャッシュが大量に残っている場合があります。次のコマンドを使ってキャッシュを削除しました。
rm -rf ~/Library/Caches/*
この操作でシステム全体のキャッシュファイルを削除でき、かなりのディスク容量を確保できました。
3. 不要なDockerイメージやコンテナの削除
Docker自体も、多くのイメージや停止中のコンテナ、ボリュームなどが溜まっていることがあります。これらは次のコマンドで一括削除できます。
docker system prune -a --volumes
このコマンドを実行すると、使われていないイメージ、コンテナ、ネットワーク、ボリュームをすべて削除できます。
4. 一時ファイルのクリーンアップ
次に、/tmp
ディレクトリにある一時ファイルを削除して、さらにディスク容量を開放しました。
sudo rm -rf /tmp/*
5. ディスク使用状況の再確認
これらの手順を実施した後、もう一度 df -h
を実行してディスクの空き容量を確認しました。
df -h
出力結果が改善され、十分な空き容量が確保されていることを確認しました。
6. Dockerビルドの再試行
ディスク容量が確保できた後、再度Dockerコンテナのビルドを試みました。
docker compose down
docker compose up --build
今度はエラーなくビルドが完了し、コンテナが正常に立ち上がりました。
まとめ
Dockerで「no space left on device」というエラーが発生した場合、最も一般的な原因はディスク容量の不足です。
今回のケースでは、不要なファイルやキャッシュ、Dockerイメージを削除することで問題を解決できました。
最後に、以下のポイントを押さえておくと、同様の問題が再発したときに迅速に対応できるでしょう。
- ディスク容量を定期的に確認し、必要に応じてクリーンアップする
- Dockerのキャッシュや古いイメージ、コンテナを定期的に削除する
- 不要な一時ファイルやキャッシュを溜め込まないように注意する
これで、ディスク容量不足に起因するDockerの問題を回避できるはずです。
【追記】macOSのキャッシュフォルダーの整理について
macOSのキャッシュフォルダーにはシステムやアプリケーションが使用する一時的なファイルが保存されており、場合によっては削除することでディスクスペースを節約できますが、削除の際には注意が必要です。
私の場合は、かなり圧迫していましたので、対応しましたが、人によっては不要かもしれません。
以下に解説を付け足します。
キャッシュの場所と役割
キャッシュフォルダーはシステムの一時ファイルを保存する場所であり、主に以下の3つのディレクトリに分かれています。
- /System/Library/Caches: システムが使用する小さなキャッシュが多く、基本的に役に立つため削除は推奨されません。
- /Library/Caches: より削除しやすいキャッシュが含まれており、頻繁に削除してもシステムには大きな影響がありません。
- ~/Library/Caches: ユーザーアカウント専用のキャッシュフォルダーで、多くのアプリケーションがキャッシュをここに保存します。このため、アプリの数に応じてサイズが大きくなる傾向があります。
削除の目安
/Library/Cachesのサイズが3GBを超える場合、キャッシュが過剰に蓄積されている可能性があり、一部のファイルを削除するとディスクスペースが空くことがあります。一般的にはサイズを基準に整理し、年数などの経過した時間は気にしなくてもよいとされています。
お疲れ様でした。
わからないところ、間違っているところ、もっといい方法がある場合は、コメントでもDMでも教えてください。