由于所用的ThinkPad T480的C盘是自带的128G的SSD盘,采用的是Windows 10操作系统,随着开发类工具的安装,C盘经常告警存储空间不足,尤其是安装Docker Desktop并进行多种镜像容器试验操作,由于Docker默认的镜像容器等存储位置在C盘, 更是捉襟见肘。
在无法快速扩容SSD盘的情况下,分析Docker(采用WSL2引擎)相关的C盘存储,进行相关更改, 将会是一种变通方案。
一、默认存储情况分析及解决方案
与Docker相关的存储主要有以下几个层面:
1) 容器引擎WSL2默认的Distro Ubuntu
这是通过Windows Store安装的,其默认存储位置是:
file:///C:/Users/<UserName>/AppData/Local/Packages/CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc/LocalState/
![](https://i-blog.csdnimg.cn/blog_migrate/bd12992f2f9a14cc86c1cc6676c18945.png)
详细内容可以通过以下访问: \\wsl$\Ubuntu
![](https://i-blog.csdnimg.cn/blog_migrate/b089303111774171ce484bd7c0c481c7.png)
这里暂不考虑Ubuntu安装包的位置的更改:
C:\Program Files\WindowsApps\CanonicalGroupLimited.Ubuntu_2204.1.8.0_x64__79rhkp1fndgsc
这是Windows应用程序,所占空间约为: 570M。
2) Docker Desktop应用程序文件的默认安装位置及重定向
Windows Docker Desktop应用的默认安装位置为:
C:\Program Files\Docker
而且安装时无选择项(截止2023/02/07的版本),可以采用目录链接的方式,将应用安装到D盘等,采用如下的命令:
mklink /j "C:\Program Files\Docker" "D:\Program Files\Docker"
![](https://i-blog.csdnimg.cn/blog_migrate/8dc9dd097599570ab8d6b645e9de8377.png)
下载Windows Docker Desktop应用直接安装即可。
如下图可以看出,C盘展示目录链接的形式:
![](https://i-blog.csdnimg.cn/blog_migrate/cea04dd5b689f40fa12d1657e5c571ba.png)
具体内容是安装在D盘下:
![](https://i-blog.csdnimg.cn/blog_migrate/4d5177c422a4b6c425cb8cd203310b21.png)
需要注意的是,这种安装模式下,当Docker Desktop应用程序自动更新升级时,有时会出现应用程序文件又物理安装到了C盘的情况,后续找时间再重现定位解决。
3) Docker应用自身系统、用户镜像文件及容器数据文件的存储位置
默认情况下, Docker相关镜像存储于C盘下的两个目录,且无法安装时进行选择:
![](https://i-blog.csdnimg.cn/blog_migrate/922bf892a55562d41f078de78c410572.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2bc08ed6abbbaf55c6ea0ea82c965c1a.png)
可以与1)一起采用下文的wsl命令,将相关目录及文件的存储位置进行重新安排。
![](https://i-blog.csdnimg.cn/blog_migrate/1ba1b94f9a4bc055f6db78d1be218f83.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3dd8821377c36e1b74d826f88ef8844d.png)
二、Docker相关存储文件位置的变动
1) 停止WSL2引擎及Windows Docker Desktop应用程序
如上所述,Docker相关的存储文件默认都是在C盘系统盘中,为进行存储数据文件位置的变动,首先需要退出Docker应用, 并停止wsl引擎
wsl --shutdown
2) 进行相关存储信息查询(默认在C盘)及确定新的存储目录
关联的数据及Distro可以采用以下的命令列出:
wsl -l -v -all
![](https://i-blog.csdnimg.cn/blog_migrate/b52030888202019e19630af7a50914b2.png)
docker-desktop-data与docker-desktop分别别对应2个 vhdx 硬盘映像文件:
C:\Users\<user name>\AppData\Local\Docker\data\ext.vhdx
C:\Users\<user name>\AppData\Local\Docker\distro\ext.vhdx
可以通过wsl export及import命令来对相关文件的存储位置进行改变。
Ubuntu是wsl2的distro,新的存储目录更改到:
d:\wsl-distro目录中。
Docker相关的镜像文件存储及数据存储,新的存储目录将分别更改存储到:
d:\Docker\wsl\distro
d:\Docker\wsl\data
3) 执行存储位置更动命令
wsl --export Ubuntu D:\wsl-distro\ubuntu.tar
wsl --unregister Ubuntu
wsl --import Ubuntu D:\wsl-distro D:\ws-distro\ubuntu.tar --version 2
![](https://i-blog.csdnimg.cn/blog_migrate/24809c3113249a38a2b98726482ba7e9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5f604cc65d260ed8d25ddb70f4877a20.png)
可以看到:
原来存储的文件已不存在。
![](https://i-blog.csdnimg.cn/blog_migrate/d305dff10a0f2b9d5daf2b6b63a6b7a4.png)
而新的存储所在已生效。
![](https://i-blog.csdnimg.cn/blog_migrate/6d19f9688f38630e352341da1622c491.png)
同样对Windows DockerDesktop的相关存储执行系列操作:
Export操作:
wsl --export docker-desktop D:\Docker\wsl\distro\docker-desktop.tar
wsl --export docker-desktop-data D:\Docker\wsl\data\docker-desktop-data.tar
Unregister操作:
wsl --unregister docker-desktop-data
wsl --unregister docker-desktop
Import操作:
wsl --import docker-desktop-data d:\Docker\wsl\data\ D:\Docker\wsl\data\docker-desktop-data.tar --version 2
wsl --import docker-desktop d:\Docker\wsl\distro\ D:\Docker\wsl\distro\docker-desktop.tar --version 2
如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/b1ba70c64675eb3e65810d1dea74d1db.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bdce84ae057be8139b87114bd9457699.png)
![](https://i-blog.csdnimg.cn/blog_migrate/72c44ed921e194bf8ff58c6672ceec98.png)
同样可以看到原存储位置所占用空间已释放:
![](https://i-blog.csdnimg.cn/blog_migrate/334a332020dbceae1d8b06588b6d240d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/96eb607b1e0537c009956945e272dcdf.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5434a7476f26c3dcb46b5c388113e222.png)
Import后也反映在新的存储位置:
![](https://i-blog.csdnimg.cn/blog_migrate/c3f98331ee8d14a81e0486762b9e6c81.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c80dccc34a4ed75d03523c7c19094be2.png)
4) 设置Docker Engine的存储位置
如前所示,默认情况下, Docker环境下的其它相关镜像文件及容器文件,存储在:C:\ProgramData\Docker目录下,可以通过Windows Docker Destop中的Docker Enginer的配置文件进行更改,具体是JSON文件中增加如下一行:
"data-root":"d\\docker"
![](https://i-blog.csdnimg.cn/blog_migrate/dcce4437a8bcb44afd6b92359ec78c17.png)
然后重启Windows Docker Desktop, 后续运行所需的镜像文件及容器文件讲会存储到新的位置,而非原来的C盘下。
通过以上的操作,将可以一定程度上缓解C盘空间有限的情况下想继续使用Windows Docker Desktop进行更多探索而捉襟见肘的情况,特此分享。