microsoft / microsoft/WSL

docker-desktop distro crash-loops with `Operation canceled @p9io.cpp:258 (AcceptAsync)`; Docker engine never starts (Win10 22H2, kernel 6.18.33.2-2)

Open
#41,631 6 comments 0 reactions 0 assignees View on GitHub
needs-author-feedback
Dominant language
C++
Stars
33.7k
Forks
1.8k
Avg merge
3d 17h
Merged PRs (30d)
116

Description

## Summary

Docker Desktop becomes permanently unresponsive because its WSL2 distro (`docker-desktop`) enters a crash cycle driven by a 9P/`p9io` failure. The utility VM stays up and the distro is restarted repeatedly, but each attempt dies before `dockerd` starts, so the Windows-side backend waits forever for the engine.

This appears to be the same failure mode as #41484 (closed as stale) and #41191 (open), observed on Windows 10 22H2.

## Environment

| Item | Value |
|---|---|
| Windows | 10.0.19045.6456 (Windows 10 22H2) |
| WSL | 2.7.14.0 |
| Kernel | 6.18.33.2-2-microsoft-standard-WSL2 |
| WSLg | 1.0.73.2 |
| MSRDC | 1.2.7214 |
| Docker Desktop | 4.71.0 (225177) |
| Docker Engine | 29.4.1 |
| Distro | `docker-desktop` (Docker-managed), plus `Ubuntu` |

`.wslconfig` (no custom kernel):

```ini
[wsl2]
# networkingMode=mirrored
defaultVhdSize=53687091200
[experimental]
sparseVhd=true
```

`docker-desktop` `/etc/wsl.conf`:

```ini
[automount]
root = /mnt/host
options = "metadata"
[interop]
enabled = true
```

## Symptom

`docker version` / `docker info` hang indefinitely. Docker Desktop UI stays on "Starting the Docker Engine". Killing and restarting Docker Desktop does not help; only rebooting the machine (or a full `wsl --shutdown`) clears it.

On the Windows side, the backend logs this, indefinitely:

```
[main.enginedependencies] still waiting for init control API to respond after 6h7m20.3767988s
[main.socketforward][vpnkit-bridge] /run/guest-services/socketforwarder-receive-fds.sock: does not exist yet, waiting for it to be created
[main.ipc][W] C<-S ConnectionClosed GET /ping (1.0004352s): Get "http://ipc/ping": context deadline exceeded
```

`wsl -d docker-desktop` is responsive (`uname`, `free` return instantly, load ~0.04), and `/run/guest-services/` is empty — `dockerd` and `containerd` never start.

## Evidence: kernel crash cycle

`dmesg` inside `docker-desktop` over one boot window. Each crash occurs roughly 25 s after the data disk (`sde`) is mounted:

```
[ 39.443015] EXT4-fs (sde): mounted filesystem 79d0ef33-9c4f-46ec-954e-b78362282797 r/w with ordered data mode.
[ 66.182557] Exception:
[ 66.182565] Operation canceled @p9io.cpp:258 (AcceptAsync)
[ 69.435343] systemd-journald[47]: Received SIGTERM from PID 1 (systemd-shutdow).
[ 69.777246] EXT4-fs (sde): unmounting filesystem 79d0ef33-9c4f-46ec-954e-b78362282797.
[ 601.029473] mini_init (121): drop_caches: 1

[ 1015.322100] EXT4-fs (sde): mounted filesystem 79d0ef33-9c4f-46ec-954e-b78362282797 r/w with ordered data mode.
[ 1036.253162] Exception:
[ 1036.253169] Operation canceled @p9io.cpp:258 (AcceptAsync)
[ 1039.498714] systemd-journald[44]: Received SIGTERM from PID 1 (systemd-shutdow).
[ 1039.770715] EXT4-fs (sde): unmounting filesystem 79d0ef33-9c4f-46ec-954e-b78362282797.
[ 1081.021581] mini_init (121): drop_caches: 1

[ 1255.654486] EXT4-fs (sde): mounted filesystem 79d0ef33-9c4f-46ec-954e-b78362282797 r/w with ordered data mode.
[ 1277.397923] Exception:
[ 1277.397928] Operation canceled @p9io.cpp:258 (AcceptAsync)
[ 1280.670938] systemd-journald[44]: Received SIGTERM from PID 1 (systemd-shutdow).
[ 1280.988326] EXT4-fs (sde): unmounting filesystem 79d0ef33-9c4f-46ec-954e-b78362282797.
[ 1321.024108] mini_init (121): drop_caches: 1
```

Alongside this, the journal is repeatedly marked unclean:

```
systemd-journald[47]: File /var/log/journal/997271786bac45bba80c636b9147e856/system.journal corrupted or uncleanly shut down, renaming and replacing.
```

And GPU-related ioctls fail continuously (also seen in #11293):

```
misc dxg: dxgk: dxgkio_query_adapter_info: Ioctl failed: -2
misc dxg: dxgk: dxgkio_is_feature_enabled: Ioctl failed: -22
```

## Host-side drvfs mounts

In the affected state, `docker-desktop` holds **28** 9p/drvfs mounts (4 host drives x several mount namespaces, plus bind-mount entries):

```
C:\ on /mnt/host/c type 9p (rw,noatime,aname=drvfs;path=C:\;uid=0;gid=0;metadata;symlinkroot=/mnt/host/,cache=0x5,access=client,msize=65536,trans=fd,rfd=5,wfd=5)
D:\ on /mnt/host/d type 9p (...)
... (repeated under /tmp/docker-desktop-root/... and per-bind-mount)
```

This is relevant because the controlled experiment in #41484 narrowed the trigger to drvfs automount.

## Relation to existing issues

- **#41484** (`p9io.cpp:258 (AcceptAsync) + docker veth teardown + journal corruption`): identical `Operation canceled @p9io.cpp:258 (AcceptAsync)` signature on Windows 10 22H2 / WSL 2.7.12 / kernel 6.18.33.2-2 / WSLg 1.0.73.2. Closed by the stale bot, not by a fix. A controlled experiment there showed that disabling drvfs automount (`/etc/wsl.conf` → `[automount] enabled=false`) eliminated the crash entirely.
- **#41191** (`Kernel BUG at fs/namei.c:844 (try_to_unlazy) after 9P/virtiofs channel disruption`): open, still receiving reports on WSL 2.7.14.0 / kernel 6.18.33.2-2.
- **#11293**: same `dxgkio_query_adapter_info` ioctl failures.

## What does not work / what works

- **Restarting Docker Desktop alone**: does not help. The backend reconnects to the same broken distro instance.
- **`wsl --shutdown` alone**: does not help. Tried on this machine before the failure was diagnosed - the distro comes back in the same broken state. This matches docker/for-win#14804, where Docker's watchdog restarts the distro immediately, so the broken state survives.
- **Killing Docker user processes first, then `wsl --shutdown`, then starting Docker Desktop**: recovers, because the first step stops the watchdog from racing the shutdown. This is what worked here.

## Notes

- The distro's data disk lives on `D:\DockerDesktopWSL` (via Docker's `CustomWslDistroDir`), not on the system drive.
- `docker_data.vhdx` is 148 GB; D: had ~102 GB free when inspected shortly after the failure, so disk exhaustion is not the cause.
- No `.dmp` crash dump was produced.

/cc @renegadeV (from #41484), @warlockhouseefs (from #41191)

Contributor guide

Open the contributing guide

Research direction

Start by comparing the dmesg crash cycle with the controlled experiment in #41484, especially the /etc/wsl.conf drvfs automount setting. Reproduce with the listed Windows 10, WSL, and kernel versions, using wsl -d docker-desktop and wsl --shutdown to inspect recovery. Done means identifying the 9P/9pio failure cause and preventing docker-desktop from crash-looping before dockerd starts.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, docker, linux
Domain
operating-systems
Issue type
Bug
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.