Self-host Windows ARM
v6.06Windows ARM64 virtualization in Docker
- Stars
- 2 259
- CPU
- Host with KVM support (Intel VT-x or AMD-V)
- RAM
- At least 2 GB of available RAM
- Storage
- At least 32 GB of free disk space
- Ports
- 8006 (Web viewer HTTP), 3389 (RDP (TCP)), 5900 (VNC)
dockurr/windowsWhat is Windows ARM?
Windows ARM runs Windows ARM64 inside a Docker container using QEMU with KVM acceleration on ARM hardware such as Raspberry Pi 5. It automatically fetches and installs Windows 10 or 11 (Pro, LTSC, Enterprise, or Tiny11 editions) without manual steps. A web viewer on port 8006 handles installation and basic access, while RDP on port 3389 delivers a smoother desktop with clipboard support. You can adjust CPU cores, RAM, disk size, language, keyboard layout, and choose networking modes like NAT, macvlan, or DHCP. Extras include USB passthrough, Samba folder sharing, dynamic memory ballooning, and optional Active Directory domain join during setup. It works on Linux with KVM, Windows 11 with nested virtualization, and Kubernetes. The code is MIT-licensed and does not ship Windows — you must supply a valid license.
Should you self-host Windows ARM?
Windows ARM scores 61/100 on selfhost.directory (how scoring works) and ranks #7 of 15 in Virtualization. It has 2 259 GitHub stars.
It shipped 10 stable releases in the past year. The latest, v6.06, came out on 5 October 2026. New versions land roughly every 2 weeks.
Setup is advanced: plan for several services and some ongoing maintenance. An official Docker image is available. It is MIT-licensed and written mostly in Batchfile.
Its closest alternative on selfhost.directory is WindowsinDocker (83/100, 53 710 stars). It scores higher overall, so compare the two before you pick. See Windows ARM vs WindowsinDocker side by side.
Features
- Active Directory domain join
- Audio Streaming
- Automatic Windows installation
- Custom ISO support
- Customizable Resources
- Dynamic memory ballooning
- Host folder sharing
- KVM hardware acceleration
- Multiple networking modes
- Multiple Windows versions
- Post-install automation
- RDP Support
- USB Passthrough
- Web-based console
- Windows ARM64 virtualization
Windows ARM README
FAQ
How do I assign an individual IP address to the container?
Create a macvlan Docker network and configure the compose file to use it with a static IPv4 address. Note: the host cannot reach this IP directly.
How do I run a command after installation?
Set COMMAND environment variable for a single command, or bind-mount a folder with install.bat as /oem to run scripts during final installation step.
How do I install a custom ISO?
Set VERSION to a custom ISO URL, or bind-mount a local ISO file as /custom.iso in the compose file.
How do I select the Windows language?
Set LANGUAGE environment variable to one of 35 supported languages like French, German, Japanese, etc. Default is English.
How do I join an Active Directory domain?
Set DOMAIN (e.g., example.com) and optionally DOMAIN_OU environment variables. Windows must reach the domain controller via DNS.
How do I configure username and password?
Set USERNAME and PASSWORD environment variables in your compose file. Default is 'Docker' / 'admin'.
How do I connect using RDP?
Use any Microsoft Remote Desktop client to connect to the container IP with username 'Docker' and password 'admin'. Clients exist for Android, iOS, Linux (FreeRDP), and Windows (mstsc).
How do I improve graphical performance?
After Windows is installed, set VGA=virtio-gpu for better desktop responsiveness. The default ramfb is more reliable during installation.
How do I enable audio?
Set AUDIO=Y environment variable, then enable Audio under Settings → Advanced in the web viewer.
How do I change CPU or RAM allocation?
Set CPU_CORES (e.g., 4) and RAM_SIZE (e.g., 8G) environment variables. Defaults are 2 cores and 4 GB.
How do I share files with the host?
Add a bind mount like - ./example:/shared to make a host folder appear as 'Shared' on the Windows desktop and as drive Z:.
How do I change the disk size?
Set the DISK_SIZE environment variable (e.g., 256G) to expand the default 64 GB disk. You'll need to extend the partition inside Windows afterward.
How do I change the storage location?
Add a bind mount like - ./windows:/storage in your compose file to store VM data in a specific host folder or named volume.
How do I select the Windows version?
Set the VERSION environment variable to values like 11, 11l, 11e, 10, 10l, 10e, core11, or tiny11 to choose the Windows edition.
How do I use it?
Start the container and connect to port 8006 in your web browser. The installation runs automatically and you'll see the Windows desktop when ready.
More in Operating System
anuraOSAnuraOS is a self-hosted, open-source web OS with Linux emulation via v86, virtual filesystem, code editor, and modular app system with PWA offline support.
DietPiLightweight justice for your single-board computer!
HomeDockOSA self-hosted cloud operating system that gives you a full desktop in the browser, hundreds of one-click apps, and automatic HTTPS certificates.
mos-releasesMOS is an open-source, self-hosted server operating system based on Devuan with a web UI for storage pools, SMB/NFS shares, Docker, LXC, VMs and a REST API.
nestOSNestOS is a self-hosted, open-source home server OS on Debian with a web UI for Docker, KVM VMs, storage, and network. In active development, not production-ready.
OlaresOpen-source, self-hosted personal cloud OS: run local LLMs and AI agents on your own Linux box, add apps from Olares Market, and manage files, GPUs and backups.
OpenWrtOpenWrt is a self-hosted, open-source Linux OS you flash onto your own router: read-write root filesystem, opkg package feeds and a full firmware build system.
os-modaA self-hosted NixOS operating system where an AI agent manages your server through structured tools, with tamper-proof audit logs and instant rollback.
router7Open-source, self-hosted home internet router written in pure Go: DHCPv4/DHCPv6, DNS, port forwarding and auto-rolling-back updates as a gokrazy appliance.
StartOSOpen-source, self-hosted Linux server OS: run services in isolated containers from a web UI with a marketplace, local HTTPS, Tor and encrypted backups.
UrbitUrbit is a self-hosted, open-source personal server stack with decentralized identity (Azimuth), VM (Vere), and OS (Arvo) for P2P computing and self-sovereign identity.
0 comments