Up front: the SnowLuma Docker image is Linux. It runs headless Linux QQ + Xvfb + VNC + noVNC inside the container. On Windows you run this Linux container through Docker Desktop's WSL2 backend — i.e. it's still running inside a lightweight Linux VM.
If you want to run native Windows QQ (QQ.exe) on Windows, don't use Docker — see Windows (manual) instead. This page is for "I just want a container and don't want to touch native QQ."
Once running, the container is exactly the same as in Docker (Linux) deployment — same image, same docker run / Compose, same ports. This page only covers the Windows-side prerequisites.
Download Docker Desktop Installer.exe from docs.docker.com and install it with the default WSL2 backend.
When you keep the WSL2 backend selected during install (the default), Docker Desktop installs / enables WSL2 for you. Reboot afterward and start Docker Desktop.
Confirm you're on the WSL2 backend and not the old Hyper-V backend: Docker Desktop → Settings → General → check Use the WSL 2 based engine.
If you'd rather install / manage WSL2 yourself (or run native Docker Engine inside a WSL distro instead of Docker Desktop), see WSL2.
With Docker Desktop ready, use the same command from the canonical Docker page. Open PowerShell:
--cap-add=SYS_PTRACE and --security-opt seccomp=unconfined are still required. SnowLuma's native addon injects the hook into the container's QQ process via ptrace, which the default seccomp profile blocks. Docker Desktop's WSL2 backend passes these through to the WSL2 kernel, so they work as usual.
The full reference — Compose, environment variables, volumes, multi-account — is not repeated here; everything is identical to Linux, so see Docker (Linux) deployment. Compose works the same from PowerShell:
Reach the container's services directly via localhost (Docker Desktop forwards the ports to the Windows host):
| URL | Purpose |
|---|---|
http://localhost:6081/ |
noVNC — view the remote desktop, scan the QR for QQ |
http://localhost:5099/ |
SnowLuma WebUI |
http://localhost:3000/ |
OneBot HTTP |
ws://localhost:3001/ |
OneBot WebSocket |
The first-login flow (noVNC QR scan, finding the WebUI temporary password, etc.) is identical to Linux — see Docker (Linux) deployment · first login.
The VNC / noVNC default password is vncpasswd — change it (-e VNC_PASSWD=...), otherwise anyone can get into your QQ desktop. And never expose the noVNC / WebUI / OneBot ports raw on the public internet.
QQ.exe) instead of the container's Linux QQ.