WSL2上の容量やDockerの容量が増えて困ったら
はじめに
Windows上のUbuntuで開発するにあたり、もはや必須とも言えるWSLとDockerですがイメージをビルドしまくりながら検証とかやっていると容量が逼迫しまくってどうしようもなくなることがあります。
それはWSL上のDockerが容量を確保した後解放しないからです。
それを強引に解放させる方法です。
概要
Dockerだけがいっぱいになったらその1だけでもいいかも。
私は その2
しかほぼやらないです。
その1. WSL上のDockerを削除して再作成する (Dockerだけ)
その2. WSLで動いているDockerの仮想ディスクを最適化する (Docker, Ubuntu)
その1
-
Docker Desktopなどから
Use the WSL 2 based engine
のチェックを外します。
-
wslのディストリビューションリストを確認
wsl --list --verbose
NAME STATE VERSION
* Ubuntu Stopped 2
docker-desktop-data Stopped 2
docker-desktop Stopped 2
- 一度dockerのdataを消す
$ wsl --unregister docker-desktop-data
Unregistering...
$ wsl --unregister docker-desktop
Unregistering...
$ wsl --list --verbose
NAME STATE VERSION
* Ubuntu Running 2
- Docker Desktopの
Use the WSL 2 based engine
のチェックを入れ直す
その2
-
ubuntuのvhdxの場所を確認する (大体AppDataの以下のところにあります。don't think feel)
C:\Users\{user name}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_xxxxxxx\LocalState\ext4.vhdx
-
PowerShellでDiskPartを起動する
diskpart
# さっき見つけたvhdxを指定
select vdisk file="C:\Users\{user name}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_xxxxxxx\LocalState\ext4.vhdx"
# 開く (完了までちょっとかかる)
attach vdisk readonly
# 最適化する
compact vdisk
# 接続を切る
detach vdisk
- Docker側も同様に行う
DockerのvhdxはC:\Users\{user name}\AppData\Local\Docker\wsl\data\ext4.vhdx
この辺。
diskpart
select vdisk file="C:\Users\k02mi\AppData\Local\Docker\wsl\data\ext4.vhdx"
attach vdisk readonly
compact vdisk
detach vdisk
どうなる
容量が減ってスッキリします
他には
使っているImageによって格納されているvhdxの場所などは大まかに異なると思いますが基本同じようにやれると思います。
私は検証用に使っているLinux (Amazon Linux) をDockerのイメージにして検証環境を再現しようとして何度も断面を変えてビルドしていたのでその都度2GB以上消費していって死にそうになったのでもしかしたら困る人はそんなにいないのかも?
最後に
これ明らかに欠陥だと思うのでそのうち治るような気もします。
Discussion