以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