usedocker

// troubleshooting · wsl 2

Docker Desktop WSL 2 issues — fixes that work

Most Docker Desktop installs that fail on Windows fail because of WSL 2. The error messages are noisy ("WSL 2 installation is incomplete", "Failed to deploy distro docker-desktop", error 0x80370102, kernel update failed) but the root causes cluster into a small handful. This page lists the exact error strings users search for and the fixes that have worked across thousands of GitHub reports and Stack Overflow answers.

By The Containers Desk Editorial team, usedocker.com

Last updated · Last verified

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

  1. The WSL 2 kernel is missing or stale. The kernel ships separately from Windows itself and updates independently.
  2. 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.
  3. Required Windows features aren’t enabled. Specifically VirtualMachinePlatform and Microsoft-Windows-Subsystem-Linux.
  4. The docker-desktop distro is in a bad state. Crashes during install or unclean shutdowns can leave it wedged.
  5. 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 /norestart

Reboot. 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.html in 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.

Sources

  1. [1] WSL install and update (Microsoft Learn)
  2. [2] WSL troubleshooting (Microsoft Learn)
  3. [3] wsl --shutdown command reference (Microsoft Learn)
  4. [4] wsl-2 tag on Stack Overflow