🐳

WSL2上の容量やDockerの容量が増えて困ったら

2023/09/05に公開

はじめに

Windows上のUbuntuで開発するにあたり、もはや必須とも言えるWSLとDockerですがイメージをビルドしまくりながら検証とかやっていると容量が逼迫しまくってどうしようもなくなることがあります。
それはWSL上のDockerが容量を確保した後解放しないからです。
それを強引に解放させる方法です。

概要

Dockerだけがいっぱいになったらその1だけでもいいかも。
私は その2 しかほぼやらないです。
その1. WSL上のDockerを削除して再作成する (Dockerだけ)
その2. WSLで動いているDockerの仮想ディスクを最適化する (Docker, Ubuntu)

その1

  1. Docker Desktopなどから Use the WSL 2 based engine のチェックを外します。

  2. wslのディストリビューションリストを確認

wsl --list --verbose
  NAME                   STATE           VERSION
* Ubuntu                 Stopped         2
  docker-desktop-data    Stopped         2
  docker-desktop         Stopped         2
  1. 一度dockerのdataを消す
$ wsl --unregister docker-desktop-data
Unregistering...
$ wsl --unregister docker-desktop
Unregistering...
$ wsl --list --verbose
  NAME      STATE           VERSION
* Ubuntu    Running         2
  1. Docker Desktopの Use the WSL 2 based engine のチェックを入れ直す

その2

  1. ubuntuのvhdxの場所を確認する (大体AppDataの以下のところにあります。don't think feel)
    C:\Users\{user name}\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_xxxxxxx\LocalState\ext4.vhdx

  2. 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
  1. 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