Windows
Full windows vm in your browser
Windows (dockur/windows) runs a full Windows virtual machine inside a Docker container with automated ISO download and installation. It targets homelab users who need an occasional Windows desktop on a Linux host. It is deployed via Docker Compose with KVM.
Key features
- Automated Windows installation
- Browser-based VNC viewer
- KVM hardware acceleration
- RDP access supported
Pros & cons
Strengths
- Automated Windows install
- Browser-based viewer
- KVM acceleration support
Trade-offs
- Requires KVM host
- Heavy resource usage
- Windows licensing still applies
Last reviewed Sep 13, 2026 · 765 words
Check for /dev/kvm on the host before you do anything else with dockur/windows. If it exists, you get a fully automated Windows 11 install in a Docker container in about 20 minutes with a browser viewer on port 8006, and it is one of the more delightful things in the self-hosting world. If it does not exist, the container falls back to software emulation and Windows takes hours to install and is unusable afterwards. Most "it doesn't work" reports about this project are hosts without KVM: cloud VMs without nested virtualisation, Docker Desktop on macOS, or an LXC container that was never given the device.
What it actually does
The image wraps QEMU. On first start it downloads the Windows ISO you asked for straight from Microsoft, answers the installer unattended, installs the VirtIO drivers, and boots to a desktop. You watch the whole thing through the built-in noVNC viewer, then switch to RDP on port 3389 once the desktop is up, because RDP is dramatically smoother than VNC for daily use. Free licence, 53,152 stars, and it stays that popular because the automation is genuinely reliable across Windows 11, 10, 8, 7, XP and several server editions.
services:
windows:
image: dockurr/windows
environment:
VERSION: "11"
RAM_SIZE: "4G"
CPU_CORES: "2"
DISK_SIZE: "64G"
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
volumes:
- ./windows:/storage
- ./shared:/data
stop_grace_period: 2m
The ./shared mount appears inside Windows as a network share, which is the easiest way to move files in and out. stop_grace_period matters: without it, docker compose down pulls the plug on Windows mid-write and you get a disk check on next boot, or worse.
Give it 4 GB even though the listing says 512 MB
The 512 MB in the catalogue is the container's own overhead. Windows 11 inside it wants 4 GB to be pleasant and 2 cores to not feel like 2009, and the disk image grows toward the DISK_SIZE you set as Windows updates itself. A 64 GB image on a spinning disk will remind you why SSDs exist. Reserve the RAM on the host too; QEMU allocates it as the guest touches pages, so a host that looked fine at idle can hit swap once Windows Update runs.
Windows licensing does not go away because it's in Docker
The project downloads evaluation and retail ISOs; it does not include a licence key. Windows runs unactivated with the watermark and personalisation limits, which is fine for a build box or a once-a-month tax application. Anything you would need a licence for on bare metal, you need one for here. Enterprise evaluation editions expire after 90 days. Plan on buying a key if the VM becomes permanent.
Proxmox, LXC and the nesting question
If you already run Proxmox, a native VM is simpler and faster than Docker-in-VM-in-Proxmox, and the only reason to use this image is that you keep everything in Compose and like the zero-config install. Running it inside a Proxmox VM works when nested virtualisation is enabled on the outer VM's CPU settings. Running it in an LXC container works when you pass /dev/kvm and /dev/net/tun through in the container config, which Proxmox does not do by default. Either path is a 5-minute change once you know it is the problem.
Reaching it from outside: RDP over a tunnel, never exposed
Port 3389 on the public internet is the single most brute-forced port on earth. Keep it on your LAN and reach it over Tailscale from a laptop; Microsoft's own RDP clients on macOS and iOS work well. For a browser-only experience across a whole team, look at Kasm Workspaces or Guacamole in front of it; the other tools in the remote-access category solve the same problem with different trade-offs.
What I'd do
Use dockur/windows for exactly what it is good at: an occasional Windows desktop on a Linux box, spun up for the one vendor tool, the firmware updater, or the game launcher that has no Linux port. Confirm KVM first, give it 4 GB and 2 cores, use RDP over Tailscale, and set the grace period. If you find yourself running it 24/7 and doing real work in it, move that workload to a proper Proxmox VM with a licence and treat the container as the prototype it was.
Similar developer tools & git apps
Excalidraw
Developer Tools & GitVirtual hand-drawn style whiteboard
Replaces Miro
lazygit
Developer Tools & GitSimple terminal UI for Git commands
Replaces GitKraken, Sourcetree
Hoppscotch
Developer Tools & GitOpen-source API development ecosystem
Replaces Postman, Insomnia
json-server
Developer Tools & GitFull fake REST API from a JSON file in seconds
Replaces Mockoon, Postman Mock
Strapi
Developer Tools & GitLeading open-source headless CMS
Replaces Contentful
NocoDB
Developer Tools & GitOpen-source Airtable alternative
Replaces Airtable