windows家庭版wsl下docker安装踩坑以及迁移出C盘攻略 背景项目使用go来开发项目需要docker。但是我的windows是家庭版不仅没有hyper-v而且安装完docker后只能使用wsl2虽然说wsl2性能传说比较好但是我的c盘容量实在台下所以wsl更加适合我能够自定义镜像存储位置先安装docker第一步先确定windows虚拟化是否开启。任务管理器-性能-CPU如图位置第二步开启hyper-v服务因为我的windows版本是家庭版的原因所以这个功能默认是没有的我需要自己手动去增加这个功能。创建一个hyper-v.bat文件复制一下代码进去用管理员身份打开等待安装完成输入Y自动重启电脑即可。完成安装后就可以使用了点击确定即可。pushd %~dp0 dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum hyper-v.txt for /f %%i in (findstr /i . hyper-v.txt 2^nul) do dism /online /norestart /add-package:%SystemRoot%\servicing\Packages\%%i del hyper-v.txt Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL第三步将系统伪装成专业版创建一个change.bat文件复制一下代码进去用管理员身份打开REG ADD HKEY_LOCAL_MACHINE\software\Microsoft\Windows NT\CurrentVersion /v EditionId /T REG_EXPAND_SZ /d Professional /F pause用同样的方法编辑Windows CurrentBuild设置19044提示的最低版本号 和CurrentBuildNumber设置。19044第四步到了这一步如果直接安装docker会报错Containers Windows Feature is not available意思是容器窗口功能不可用新建一个containers.bat内容如下pushd %~dp0 dir /b %SystemRoot%\servicing\Packages\*containers*.mum containers.txt for /f %%i in (findstr /i . containers.txt 2^nul) do dism /online /norestart /add-package:%SystemRoot%\servicing\Packages\%%i del containers.txt Dism /online /enable-feature /featurename:Containers -All /LimitAccess /ALL第五步这个后就可以直接安装docker for windows了自己在官网下载。这个版本是基于wsl安装所以家庭版也可以在advance里面修改镜像存储目录。tips:如果没有指定docker安装路径的需求那么直接安装就可以了默认是安装在c盘如果有需求安装到其他路径的话有两个方案①比如我安装在d盘的docker所以我在d盘先新建好docker文件夹以及docker/data文件夹然后用管理员身份打开cmd执行start /w Docker Desktop Installer.exe install -accept-license --installation-dirD:\Docker --wsl-default-data-rootD:\Docker\data --windows-containers-default-data-rootD:\\Docker②正常安装之后再按照迁移docker教程走迁移docker选用因为docker比较强势默认只能安装在c盘无奈我的c盘又太小度娘了一圈将一个行之有效的方法贴上来。第一步关闭服务右键结束进程windows管理工具-hyper-v管理器第二步移动文件并且修改路径将 C:\Program Files\Docker 和 C:\ProgramData\DockerDesktop 剪切到你想放的磁盘下我的是D:\go旧版本的 docker的根镜像存放目录会在C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks删除源文件夹C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks接着分别创建符号链接省出C盘的空间不说配置文件什么的都不用动cmd /c mklink /D C:\Program Files\Docker D:\go\Dockercmd /c mklink /D C:\ProgramData\DockerDesktop D:\go\DockerDesktopcmd /c mklink C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks D:\go\DockerDesktop\vm-data\hyper-v迁移完成打开小鲸鱼如果出现问题Net stop com.docker.service Net start com.docker.service卸载如果是创建符号链接法迁移路径的话卸载的时候在正常删除的同时。需要手动删除我们创建的三个符号链接。否则我的情况会出现下一次正常安装docker后想卸载的时候会一直卡在removing vm and image。如果docker一直卸载不掉有强制卸载法如下1.创建delete.ps1文件写入以下代码$ErrorActionPreference SilentlyContinue kill -force -processname Docker for Windows, com.docker.db, vpnkit, com.docker.proxy, com.docker.9pdb, moby-diag-dl, dockerd try { ./MobyLinux.ps1 -Destroy } Catch {} $service Get-WmiObject -Class Win32_Service -Filter Namecom.docker.service if ($service) { $service.StopService() } if ($service) { $service.Delete() } Start-Sleep -s 5 Remove-Item -Recurse -Force ~/AppData/Local/Docker Remove-Item -Recurse -Force ~/AppData/Roaming/Docker if (Test-Path C:\ProgramData\Docker) { takeown.exe /F C:\ProgramData\Docker /R /A /D Y } if (Test-Path C:\ProgramData\Docker) { icacls C:\ProgramData\Docker\ /T /C /grant Administrators:F } Remove-Item -Recurse -Force C:\ProgramData\Docker Remove-Item -Recurse -Force C:\Program Files\Docker Remove-Item -Recurse -Force C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Docker Remove-Item -Force C:\Users\Public\Desktop\Docker for Windows.lnk Get-ChildItem HKLM:\software\microsoft\windows\currentversion\uninstall | % {Get-ItemProperty $_.PSPath} | ? { $_.DisplayName -eq Docker } | Remove-Item -Recurse -Force Get-ChildItem HKLM:\software\classes\installer\products | % {Get-ItemProperty $_.pspath} | ? { $_.ProductName -eq Docker } | Remove-Item -Recurse -Force Get-Item HKLM:\software\Docker Inc. | Remove-Item -Recurse -Force Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\Run -name Docker for Windows | Remove-Item -Recurse -Force #Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\UFH\SHC | ForEach-Object {Get-ItemProperty $_.PSPath} | Where-Object { $_.ToString().Contains(Docker for Windows.exe) } | Remove-Item -Recurse -Force $_.PSPath #Get-ItemProperty HKCU:\software\microsoft\windows\currentversion\UFH\SHC | Where-Object { $(Get-ItemPropertyValue $_) -Contains Docker }以管理员身份打开powershellcd 文件路径 .\delete.ps1再用360清理一下垃圾就完全卸载干净了。