📘

Dockerに占領されたディスク領域を解放する方法

2022/12/20に公開

上の画像のようにDockerで好き勝手イメージやらコンテナやら作っていましたらCドライブの容量がパンパンになってしまいました…。

原因であるDockerのイメージ等削除します。

docker system prune
docker volume prune
docker image prune -a
docker builder prune

など。

またDockerのディスク使用状況については下記コマンドで見れます。

docker system df

上のコマンドでDockerの未使用イメージなどが削除されたことを確認しましたが、結果は冒頭の画像のままでした。

原因

https://qiita.com/sarisia/items/5c53c078ab30eb26bc3b

完全に上記記事に当てはまりました。WSL2は一度確保したディスクをホストに返さないらしく、WSL2上で動かしているDockerも返してくれていないわけでした。

上記記事にあるHyper-Vを使う方法はHyper-Vが入っていなかったため不可。

またWSL2バックエンドを作り直す方法も少し抵抗があり避けました。

解決方法

https://answers.microsoft.com/en-us/windows/forum/all/optimize-vhd-not-found-in-windows-10-home/a727b760-0f82-4d0f-8480-d49eeaeb11a2

自分は上記記事Answerにあった方法を採用しました。diskpartを使う方法です。

wsl --shutdown
diskpart
# open window Diskpart
select vdisk file="C:\WSL-Distros\…\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
exit

上記コマンドはPowerShell上で実行します。
(またPowerShellは管理者権限で実行しておきます)

fileに指定するpathに関しては基本下記になるかと。

C:\Users\ユーザー名\AppData\Local\Docker\wsl\data\ext4.vhdx

以上でディスク領域の解放が完了します。

(100GB以上Dockerで使っていたのか自分……)

Discussion