205
186

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WSL2 Docker が PC のディスクを圧迫する

Last updated at Posted at 2020-06-06

概要

WSL2 バックエンドの Docker では、コンテナやボリューム、イメージを削除しても、ホスト (Windows) のディスク容量が解放されない。

原因

WSL2 は一度確保したディスクをホストに返さないらしい。Issue が上がっている:

WSL 2 should automatically release disk space back to the host OS · Issue #4699 · microsoft/WSL

確認

雑に確認してみる。

Docker のディスクファイル (%LocalAppData%\Docker\wsl\data\ext4.vhdx) のサイズを確認する。

  • WSL2 バックエンドを作成したばかりのまっさらな状態:

    > docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    > dir
    
        Directory: C:\Users\Sarisia\AppData\Local\Docker\wsl\data
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a----          6/6/2020   7:19 PM     1016070144 ext4.vhdx
    

    1016070144 B → 969 MB

  • 大きなイメージを pull した状態:

    > docker pull docker.pkg.github.com/sarisia/tex/texlive:2019-extra
    2019-extra: Pulling from sarisia/tex/texlive
    5bed26d33875: Pull complete
    f11b29a9c730: Pull complete
    930bda195c84: Pull complete
    78bf9a5ad49e: Pull complete
    5bff6f661674: Pull complete
    1e7babce469c: Pull complete
    bf656e88758e: Pull complete
    ab176992b632: Pull complete
    360f3ee99aa4: Pull complete
    Digest: sha256:f751375c5caad239d135f6aead80597c5b34aeb2b73f7e8d8ad297729c43b6d9
    Status: Downloaded newer image for docker.pkg.github.com/sarisia/tex/texlive:2019-extra
    docker.pkg.github.com/sarisia/tex/texlive:2019-extra
    > docker image ls
    REPOSITORY                                  TAG                 IMAGE ID            CREATED             SIZE
    docker.pkg.github.com/sarisia/tex/texlive   2019-extra          53c218d1c0bf        8 weeks ago         1.13GB
    > dir
    
        Directory: C:\Users\Sarisia\AppData\Local\Docker\wsl\data
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a----          6/6/2020   7:27 PM     2224029696 ext4.vhdx
    

    2224029696 B → 2121 MB (+1152 MB)

    イメージファイルが膨らんでいることが確認できる

  • イメージを削除

    > docker image rm 53c218d1c0bf
    Untagged: docker.pkg.github.com/sarisia/tex/texlive:2019-extra
    Untagged: docker.pkg.github.com/sarisia/tex/texlive@sha256:f751375c5caad239d135f6aead80597c5b34aeb2b73f7e8d8ad297729c43b6d9
    Deleted: sha256:53c218d1c0bf44ef7a63d63111cbe067bd910faee6a1691ec6667e65e81e5439
    Deleted: sha256:f877802904c83a39bab53d6cb306d1d78ff697312fb98709c8cbcc6b6578b92a
    Deleted: sha256:a831a41179769eafa9c3a5c7398b121b76c01f7e781e2bfffde67c61d6c58594
    Deleted: sha256:b85b9c0c60ab67e67fa15e515463588d2315e0efe792f14539164acf3a5144fd
    Deleted: sha256:5e8b2c6dc77ceec953400743a186a5d1368f1ebee6a5b03528a47a47c83523a9
    Deleted: sha256:a2d4715ae3ad3235925b2675aab7e008adb071affc23fd8b4681b88758103200
    Deleted: sha256:1d9112746e9d86157c23e426ce87cc2d7bced0ba2ec8ddbdfbcc3093e0769472
    Deleted: sha256:efcf4a93c18b5d01aa8e10a2e3b7e2b2eef0378336456d8653e2d123d6232c1e
    Deleted: sha256:1e1aa31289fdca521c403edd6b37317bf0a349a941c7f19b6d9d311f59347502
    Deleted: sha256:c8be1b8f4d60d99c281fc2db75e0f56df42a83ad2f0b091621ce19357e19d853
    > docker image ls
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    > dir
    
        Directory: C:\Users\Sarisia\AppData\Local\Docker\wsl\data
    
    Mode                 LastWriteTime         Length Name
    ----                 -------------         ------ ----
    -a----          6/6/2020   7:30 PM     2224029696 ext4.vhdx
    

    2224029696 B → 2121 MB (+0 MB)

    ホストのディスクが解放されていない。

解決

上の Issue の通り手動で vhdx を最適化するか、または一度 Docker の WSL2 バックエンドを吹き飛ばしてしまえばいい。

解決策1. vhdx を最適化する

Hyper-V が有効である必要がある: Windows 10 Pro 以上が必要

既存のコンテナやボリュームを残したまま、ディスクのサイズを縮小できる。

PowerShellOptimize-VHD すればよい。ドキュメントは:

Optimize-VHD (hyper-v)

まず、 WSL の docker-desktop-data を停止するため、Windows の Docker Desktop を終了し、WSL を落とす:

> wsl --shutdown

そして、Administrator の PowerShell で、Docker のディスクファイル (%LocalAppData%\Docker\wsl\data\ext4.vhdx) に対して Optimize-VHD する:

> Optimize-VHD -Path .\ext4.vhdx -Mode full
> dir

    Directory: C:\Users\Sarisia\AppData\Local\Docker\wsl\data

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----          6/6/2020   7:33 PM      989855744 ext4.vhdx

989855744 B → 944 MB (-1177 MB)

ディスクファイルのサイズが小さくなり、ホストのディスクが解放された。

解決策2. WSL2 バックエンドを作り直す

既存のコンテナやボリューム、イメージがすべて吹き飛ぶので注意!

Docker Desktop の設定で User the WSL 2 based engine のチェックを外し、 Apply & Restart する:

Untitled.png

チェックを外すと、Docker は WSL2 を使わなくなるものの、WSL に登録されたディストリビューションは残ったままとなる:

> wsl --list --verbose
  NAME                   STATE           VERSION
* Ubuntu                 Stopped         2
  docker-desktop-data    Stopped         2
  docker-desktop         Stopped         2

ディストリビューションを削除すれば、ディスクも消える:

> wsl --unregister docker-desktop-data
Unregistering...
> wsl --unregister docker-desktop
Unregistering...
> wsl --list --verbose
  NAME      STATE           VERSION
* Ubuntu    Running         2

その後、再度 Docker Desktop の設定より、チェックを入れて適用すれば、ディストリビューションが再作成される。ただし、Docker 上の全てが吹き飛ぶ

205
186
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
205
186

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?