Windows上でWSL2バックエンドのDocker Desktopを使っていると、いつの間にかCドライブの空き容量が減っていることがあります。イメージやコンテナを削除したはずなのに容量が戻らない――このケースの多くは、WSL2の仮想ディスクファイルが自動的に縮小されないことが原因です。この記事では原因の確認から解消方法までを順番に解説します。
なぜ容量が減り続けるのか
Docker DesktopをWSL2バックエンドで動かすと、コンテナやイメージのデータはWindows上の仮想ディスクファイル(.vhdx)に保存されます。このファイルはデータが増えると自動的に拡張されますが、逆にデータを削除しても自動的には縮小されません。そのため、docker system prune などでDocker内部のデータを消しても、Windows側で確認できるディスク使用量は変わらないままになります。
手順1:不要なDockerデータを削除する
まずはDocker側で何が容量を使っているかを確認します。
docker system df
未使用のイメージ・コンテナ・ボリューム・ビルドキャッシュをまとめて削除します。
docker system prune -a --volumes
手順2:WSL2の仮想ディスクを圧縮する
手順1だけでは.vhdxファイル自体のサイズは縮まりません。以下の手順で物理的に圧縮します。
まずWSLを完全に停止します。
wsl --shutdown
次に対象ファイルを探します。Docker Desktopのバージョンによって配置場所が異なるため、以下のいずれかを確認してください。
%LOCALAPPDATA%\Docker\wsl\data\ext4.vhdx
%LOCALAPPDATA%\Docker\wsl\disk\docker_data.vhdx
wsl -l -v を実行すると docker-desktop や docker-desktop-data といったディストロ名が表示されるので、場所の特定に役立ちます。
ファイルが見つかったら、管理者権限のコマンドプロンプトまたはPowerShellでdiskpartを使って圧縮します。
diskpart
select vdisk file="C:\パス\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit
手順3:再発防止の設定をしておく
Docker Desktopの設定から、今後の肥大化を抑えることもできます。
- Settings → Resources → Advanced:「Disk image size」に上限を設定しておくと、無制限に肥大化するのを防げます。
- Settings → Troubleshoot:「Clean / Purge data」ボタンで完全リセットも可能です(ただしイメージ等はすべて消去されます)。
まとめ
WSL2版Docker Desktopのストレージ肥大化は、多くの場合「データは削除したのに仮想ディスクファイルが縮まない」ことが原因です。docker system prune でDocker内部を整理したうえで、diskpartによる.vhdxの圧縮まで行うことで、実際のディスク使用量を正しく回収できます。定期的にこの2ステップを行う習慣をつけておくと安心です。