Symptoms — the exact messages you’ll see
Match what Docker Desktop is showing you to the closest item below; each maps to one of the fixes further down.
- WSL 2 installation is incomplete. The WSL 2 Linux kernel is now installed using a separate MSI update package.
- Failed to deploy distro docker-desktop to C:\Users\…\docker-desktop.tar
- Error: 0x80370102 The virtual machine could not be started because a required feature is not installed.
- docker: error during connect: this error may indicate that the docker daemon is not running
- docker-desktop is in a bad state and is unable to start
Root causes
- The WSL 2 kernel is missing or stale. The kernel ships separately from Windows itself and updates independently.
- Hardware virtualization is off in BIOS. WSL 2 needs the Windows Hypervisor Platform; the Hypervisor Platform needs CPU virtualization. See enabling virtualization if Task Manager → Performance → CPU shows Virtualization: Disabled.
- Required Windows features aren’t enabled. Specifically
VirtualMachinePlatformandMicrosoft-Windows-Subsystem-Linux. - The docker-desktop distro is in a bad state. Crashes during install or unclean shutdowns can leave it wedged.
- A Windows policy or third-party security tool is blocking WSL. Common in corporate-managed environments.
Fix #1 — Update WSL 2 (resolves the majority of issues)
Open PowerShell as administrator and run:
PS> wsl --update PS> wsl --status Default Distribution: Ubuntu Default Version: 2 Kernel version: 5.15.167.4-1 WSL version: 2.5.7.0
wsl --update installs or updates the WSL 2 kernel directly from Microsoft. wsl --status confirms what version is in place. After updating, run wsl --shutdown and relaunch Docker Desktop.
Fix #2 — Enable the required Windows features
In administrator PowerShell:
PS> dism.exe /online /enable-feature \
/featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
PS> dism.exe /online /enable-feature \
/featurename:VirtualMachinePlatform /all /norestartReboot. On Windows 11 with the latest builds, wsl --install already enables both for you, so you only need this on older builds or systems where the install command was run partially.
Fix #3 — Rebuild the docker-desktop distro from scratch
When the engine never starts and wsl --list --verbose shows docker-desktop stuck in the Stopped state, the cleanest fix is a full rebuild:
PS> wsl --shutdown PS> wsl --unregister docker-desktop PS> wsl --unregister docker-desktop-data
This deletes the engine VM and all images and volumes you stored in it. Bind-mounted source code is unaffected because it lives on the host file system. After unregistering, relaunch Docker Desktop — it recreates both distros from the bundled image automatically. The first launch takes longer than usual because the engine VM has to do its initial setup.
Fix #4 — Re-install the WSL 2 backend from Docker Desktop settings
Docker Desktop → Settings → General → uncheck Use the WSL 2 based engine, click Apply, wait for the engine to switch backends, then re-check it. This forces Docker Desktop to re-import its WSL distros from its own bundled tar file. Useful when the distro registration is partially corrupt and wsl --unregister isn’t enough.
Fix #5 — Check for blocking policies and security tools
On corporate-managed laptops, Group Policy or third-party endpoint protection can silently block WSL 2 startup. Two things to check:
- Run
gpresult /h gpo.htmlin admin PowerShell and search the report for WSL or VirtualMachinePlatform. Disabled policies show up here. - Temporarily pause your endpoint protection (Defender, CrowdStrike, SentinelOne, etc.) and try launching Docker Desktop. If it works with protection paused, file a support ticket with your IT team — they can usually add a WSL exclusion.
Verifying the fix
PS> wsl --list --verbose NAME STATE VERSION docker-desktop Running 2 docker-desktop-data Running 2 PS> docker info | findstr "Server Version" Server Version: 27.2.0 PS> docker run --rm hello-world Hello from Docker!
Both WSL distros should be in the Running state when Docker Desktop is up. If they show Stopped while the whale icon claims the engine is running, something is still wrong — go back to fix #3.
Frequently asked questions
What does "WSL 2 installation is incomplete" actually mean?
Docker Desktop is set to use the WSL 2 backend, but the WSL 2 Linux kernel is missing or out of date on your machine. Run `wsl --update` in admin PowerShell, reboot, and relaunch Docker Desktop.
Why does "wsl --install" fail with "0x80370102"?
The Windows Hypervisor Platform feature is disabled or hardware virtualization is off in BIOS. Enable both, reboot, and re-run `wsl --install`. Step-by-step BIOS instructions live on the virtualization troubleshooting page.
How do I rebuild the docker-desktop WSL distro?
Quit Docker Desktop. Run `wsl --unregister docker-desktop` and `wsl --unregister docker-desktop-data` in admin PowerShell. Relaunch Docker Desktop — it recreates both distros from a clean image. This fixes the majority of "Docker Desktop is starting…" hangs that don't resolve with a normal restart.
Can I move the WSL 2 VHDX off the C: drive?
Yes. Quit Docker Desktop, export the docker-desktop-data distro with `wsl --export`, unregister it, then re-import it onto another drive with `wsl --import`. The Docker docs have a step-by-step. Don't edit the VHDX path manually — WSL stores the location in the registry.