私はWindow11でRancher Desktopを使ってDocker環境を構築しています。
AWSのCDKを使ってデプロイ作業を進めていた際、次のようなエラーメッセージに遭遇しました。
OSError: [Errno 28] No space left on device: '/tmp/pip-build-tracker-6tvpu2ih'
CDK経由でのデプロイ中にこのエラーが発生し、「スペース不足か…」と思いました。
実際、対象のイメージについては、docker buildを使ってCDKを介さず個別にビルドしてみても、同様のエラーが発生。
「どうせSSDの空き領域が無いんだろう。いくつか大きめのファイルを消せばいいか。」と軽く考えていました。
実際の検証と気づき
まず、ホストOSのSSDの空き領域を確認したところ、数十GBの余裕があり多くはないけど少なくもないよねとなりました。
単純にSSD上のファイル削除で解決できる問題ではないと認識を改めました。
そこで、「docker system df」というコマンドでDockerが内部で使っている領域の状況を確認することに。すると、Rancher Desktop内部(WSL2環境内)の仮想ディスク領域がいっぱいになっているであろうことが判明しました。
Dockerのクリーンアップコマンド群に注目
調査の結果、以下のprune系コマンドを用いて不要なオブジェクトを削除することで、システム領域の解放が可能であるとわかりました。
1. docker system df
Docker全体のディスク使用状況を確認できるコマンドです。
公式ドキュメント: Docker System DF
docker system df
このコマンドで、イメージ、コンテナ、ボリューム、ビルドキャッシュなど、各種オブジェクトがどれだけの容量を使っているかを一覧表示できます。
2. docker image prune
使われていない(dangling)イメージを削除します。
- -a オプション を付けると、未使用の全イメージも対象になります。
- -f オプション を付けると確認プロンプトをスキップします。
公式ドキュメント: Docker Image Prune
docker image prune -a -f
3. docker container prune
停止中のコンテナをまとめて削除するコマンドです。
公式ドキュメント: Docker Container Prune
docker container prune -f
4. docker volume prune
コンテナに紐付いていない未使用ボリュームを削除します。
公式ドキュメント: Docker Volume Prune
docker volume prune -f
5. docker network prune
使用されていないネットワークを削除するためのコマンドです。
公式ドキュメント: Docker Network Prune
docker network prune -f
6. docker system prune
また、これらをまとめて実行するために、
docker system prune
を使えば、コンテナ、ネットワーク、danglingイメージ、ビルドキャッシュを一括で削除でき、–volumes オプションを付ければ未使用のボリュームも削除対象となります。
公式ドキュメント: Docker System Prune
docker system prune -a --volumes -f
クリーンアップ後の効果
これらのコマンドを実行して不要なオブジェクトを削除した結果、Rancher Desktop内部の仮想ディスクの空き領域が大幅に解放されました。
その後、再度docker buildを試みたところ、エラーは発生せず、AWS CDKを介したデプロイも問題なく完了しました。
まとめ
今回の経験から、ホストOS上の空き領域だけを見るのではなく、DockerやRancher Desktop内部のシステム領域の使用状況にも注意が必要であることを再認識しました。
また、Dockerのprune系コマンドを上手く活用することで、不要なリソースを整理し、システムパフォーマンスやビルド環境の安定性を確保できることも学びました。
以上、Windows11環境でRancher Desktopを利用している私の体験談でした。
皆さんも、同様のエラーに遭遇した際はぜひ一度、Docker内部のリソース状況を確認してみてください。