Windows 10 將 Docker Desktop for Windows(WSL 2 方式)文件存儲移出系統盤放置到其它目錄

背景:

以WSL2方式使用Docker Desktop for Windows確實帶來了更好的體驗,但同時也帶來新的問題。其中最典型的問題就是系統盤空間的佔用越來越大。而且還有典型的內存問題。

最初沒有注意,也是因爲沒有找到最根本的解決辦法,採用下面的配置粗略的應付了一下:

[wsl2]
memory=10GB
swapFile=D:\\LocalCaches\\wsl2\\swap.vhdx
localhostForwarding=true

注:在當前系統的用戶下,新建.wlsconfig文件,在其中配置以上代碼。

實際上本質問題沒有解決。有一個碼友來詢問這個問題,才認認真真的考慮如何解決。

說明:

默認情況下,Docker Desktop for Window會創建如下兩個發行版(distro):

  • docker-desktop
  • docker-desktop-data

如果訪問%LOCALAPPDATA%/Docker/wsl目錄,就可以看到兩個文件夾,同時每個文件夾中都會有一個vhdx文件。

%LOCALAPPDATA%/Docker/wsl就是當前登錄用戶的AppData\Local目錄,假設當前登錄的用戶爲Administrator,那麼這個目錄就是C:\User\Administrator\AppData\Local\Docker\wsl

  • data/ext4.vhdx 是被docker-desktop-data 發行版使用
  • distro/ext4.vhdx 是被 docker-desktop 發行版使用

docker-desktop-data 是被用來存儲docker images 以及相關的數據。因此,它的大小會隨着使用逐步增長,因此導致系統盤空間不足。

vhdx文件最大支持256G,超出這個大小將會出錯。參見:官方說明

解決步驟

1、刪除所有容器

可以使用命令,查看所有容器:

docker ps -a

或者

打開Docker Desktop for Window 的Dashboard界面,將該界面中的所有內容刪除。

這一步很重要,如果不這樣操作,進行後續操作的時候,要麼提示網絡相關錯誤:cannot create a specific network,要麼導入完成之後,vhdx文件會消失。

2、退出Docker Desktop

3、在控制檯中,使用下面命令,關閉所有發行版

wsl --shutdown

4、檢查是否所有發行版都已經關閉。

wsl --list --verbose

命令可以查看到,實例效果如下:

D:\work>wsl --list --verbose
NAME                   STATE           VERSION
docker-desktop         Stopped         2
Ubuntu-18.04           Stopped         2
docker-desktop-data    Stopped         2
D:\work>

5、備份已有image數據

通過下面命令,將已有的image數據,以tar格式備份已有數據到指定目錄。目錄根據自己實際情況指定。

wsl --export docker-desktop-data E:\docker-desktop\docker-desktop-data.tar

docker-desktop-data名字,就是上一步中,列舉出來的Docker Desktop存儲image的發行版

6、註銷當前的docker-desktop-data發行版

wsl --unregister docker-desktop-data

該命令執行完成之後,再次使用wsl --list --verbose命令查看,docker-desktop-data就已經不在了。

7、重新導入備份的docker-desktop-data

wsl --import docker-desktop-data E:\docker-desktop\data E:\docker-desktop\docker-desktop-data.tar --version 2
  • docker-desktop-data Docker Desktop存儲image的發行版
  • 第二個路徑,即指定vhdx新的放置目錄。指定到目錄級別即可,不用指定vhdx名。
  • 第三個路徑,指定第5步中備份的數據。

8、重新運行Docker Desktop

Docker Desktop 運行成功之後,查看新目錄中的vhdx的修改時間,如果修改時間是最新時間,就說明配置成功。

參考資料:

(1):https://dev.to/kimcuonthenet/move-docker-desktop-data-distro-out-of-system-drive-4cg2
(2):https://docs.microsoft.com/en-us/windows/wsl/compare-versions#understanding-wsl-2-uses-a-vhd-and-what-to-do-if-you-reach-its-max-size

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章