以WSL2方式使用Docker Desktop for Windows確實帶來了更好的體驗,但同時也帶來新的問題。其中最典型的問題就是系統盤空間的佔用愈來愈大。並且還有典型的內存問題。docker
最初沒有注意,也是由於沒有找到最根本的解決辦法,採用下面的配置粗略的應付了一下:windows
[wsl2] memory=10GB swapFile=D:\\LocalCaches\\wsl2\\swap.vhdx localhostForwarding=true
注:在當前系統的用戶下,新建.wlsconfig文件,在其中配置以上代碼。
實際上本質問題沒有解決。有一個碼友來詢問這個問題,才認認真真的考慮如何解決。網絡
默認狀況下,Docker Desktop for Window會建立以下兩個發行版(distro):code
若是訪問%LOCALAPPDATA%/Docker/wsl目錄,就能夠看到兩個文件夾,同時每一個文件夾中都會有一個vhdx文件。內存
%LOCALAPPDATA%/Docker/wsl就是當前登陸用戶的AppDataLocal目錄,假設當前登陸的用戶爲Administrator,那麼這個目錄就是C:UserAdministratorAppDataLocalDockerwsl
docker-desktop-data 是被用來存儲docker images 以及相關的數據。所以,它的大小會隨着使用逐步增加,所以致使系統盤空間不足。ci
vhdx文件最大支持256G,超出這個大小將會出錯。參見:官方說明get
一、刪除全部容器it
可使用命令,查看全部容器:io
docker ps -a
或者import
打開Docker Desktop for Window 的Dashboard界面,將該界面中的全部內容刪除。
這一步很重要,若是不這樣操做,進行後續操做的時候,要麼提示網絡相關錯誤:cannot create a specific network,要麼導入完成以後,vhdx文件會消失。
二、退出Docker Desktop
三、在控制檯中,使用下面命令,關閉全部發行版
wsl --shutdown
四、檢查是否全部發行版都已經關閉。
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>
五、備份已有image數據
經過下面命令,將已有的image數據,以tar格式備份已有數據到指定目錄。目錄根據本身實際狀況指定。
wsl --export docker-desktop-data E:\docker-desktop\docker-desktop-data.tar
docker-desktop-data名字,就是上一步中,列舉出來的Docker Desktop存儲image的發行版
六、註銷當前的docker-desktop-data發行版
wsl --unregister docker-desktop-data
該命令執行完成以後,再次使用 wsl --list --verbose命令查看,docker-desktop-data就已經不在了。
七、從新導入備份的docker-desktop-data
wsl --import docker-desktop-data E:\docker-desktop\data E:\docker-desktop\docker-desktop-data.tar --version 2
八、從新運行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