Windows 10 將 Docker Desktop for Windows(WSL 2 方式)檔案儲存移出系統盤放置到其它目錄
背景:
以WSL2方式使用Docker Desktop for Windows確實帶來了更好的體驗,但同時也帶來新的問題。其中最典型的問題就是系統盤空間的佔用越來越大。而且還有典型的記憶體問題。
最初沒有注意,也是因為沒有找到最根本的解決辦法,採用下面的配置粗略的應付了一下:
1 [wsl2] 2 memory=10GB 3 swapFile=D:\\LocalCaches\\wsl2\\swap.vhdx 4 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、刪除所有容器
可以使用命令,檢視所有容器:
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
命令可以檢視到,例項效果如下:
1 D:\work>wsl --list --verbose 2 NAME STATE VERSION 3 docker-desktop Stopped 2 4 Ubuntu-18.04 Stopped 2 5 docker-desktop-data Stopped 2 6 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發行版
1 wsl --unregister docker-desktop-data
該命令執行完成之後,再次使用wsl --list --verbose命令檢視,docker-desktop-data就已經不在了。
7、重新匯入備份的docker-desktop-data
1 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