
Führen Sie Windows in einem Docker-Container mit KVM-Beschleunigung, automatischer Installation und anpassbaren Ressourcen aus. Unterstützt mehrere Windows-Versionen, USB-Passthrough und macvlan-Netzwerke.
Windows in einem Docker-Container.
services:
windows:
image: dockurr/windows
container_name: windows
environment:
VERSION: "11"
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
volumes:
- ./windows:/storage
restart: always
stop_grace_period: 2m
docker run -it --rm --name windows -e "VERSION=11" -p 8006:8006 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/windows:/storage" --stop-timeout 120 docker.io/dockurr/windows
kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml
[!NOTE] Docker Desktop unter Linux, macOS und Windows 10 bietet Containern derzeit keinen KVM-Zugriff und wird daher nicht unterstützt.
Sehr einfach! Diese Schritte sind durchzuführen:
Starten Sie den Container und verbinden Sie sich über Ihren Webbrowser mit Port 8006.
Lehnen Sie sich zurück und entspannen Sie sich, während die Magie passiert – die gesamte Installation läuft vollautomatisch ab.
Sobald Sie den Desktop sehen, ist Ihre Windows-Installation einsatzbereit.
Genießen Sie Ihren brandneuen Computer und vergessen Sie nicht, diesem Repository einen Stern zu geben!
Standardmäßig wird Windows 11 Pro installiert. Sie können jedoch die Umgebungsvariable VERSION zu Ihrer Compose-Datei hinzufügen, um eine alternative Windows-Version zum Download anzugeben:
environment:
VERSION: "10"
Wählen Sie aus den folgenden Werten:
[!TIP] Für die Installation von ARM64-Versionen von Windows verwenden Sie dockur/windows-arm.
Um den Speicherort zu ändern, fügen Sie den folgenden Bind-Mount in Ihre Compose-Datei ein:
volumes:
- ./windows:/storage
Ersetzen Sie den Beispielpfad ./windows durch den gewünschten Speicherordner oder ein benanntes Volume.
Um die Standardgröße von 64 GB zu erweitern, fügen Sie die Einstellung DISK_SIZE zu Ihrer Compose-Datei hinzu und legen Sie die gewünschte Kapazität fest:
environment:
DISK_SIZE: "256G"
[!TIP] Dies kann auch verwendet werden, um eine vorhandene Festplatte ohne Datenverlust auf eine größere Kapazität zu vergrößern. Allerdings müssen Sie danach die Festplattenpartition manuell erweitern, da der hinzugefügte Speicherplatz als nicht zugeordnet angezeigt wird.
Nach der Installation befindet sich ein Ordner namens Shared auf Ihrem Desktop, der zum Austauschen von Dateien mit dem Host-Rechner verwendet werden kann.
Um einen Ordner auf dem Host für diesen Zweck auszuwählen, fügen Sie den folgenden Bind-Mount in Ihre Compose-Datei ein:
volumes:
- ./example:/shared
Ersetzen Sie den Beispielpfad ./example durch Ihren gewünschten Freigabeordner, der dann als Shared sichtbar wird.
Standardmäßig darf Windows 2 CPU-Kerne und 4 GB RAM verwenden.
Wenn Sie dies anpassen möchten, können Sie die gewünschte Menge mithilfe der folgenden Umgebungsvariablen festlegen:
environment:
RAM_SIZE: "8G"
CPU_CORES: "4"
Standardmäßig wird ein Benutzer namens Docker erstellt; dessen Passwort lautet admin.
Wenn Sie während der Installation andere Anmeldedaten festlegen möchten, können Sie diese in Ihrer Compose-Datei konfigurieren:
environment:
USERNAME: "bill"
PASSWORD: "gates"
Standardmäßig wird die englische Version von Windows heruntergeladen.
Sie können jedoch die Umgebungsvariable LANGUAGE zu Ihrer Compose-Datei hinzufügen, um eine alternative Sprache für den Download anzugeben:
environment:
LANGUAGE: "French"
Sie können zwischen Folgendem wählen: 🇦🇪 Arabic, 🇧🇬 Bulgarian, 🇨🇳 Chinese, 🇭🇷 Croatian, 🇨🇿 Czech, 🇩🇰 Danish, 🇳🇱 Dutch, 🇬🇧 English, 🇪🇪 Estonian, 🇫🇮 Finnish, 🇫🇷 French, 🇩🇪 German, 🇬🇷 Greek, 🇮🇱 Hebrew, 🇭🇺 Hungarian, 🇮🇹 Italian, 🇯🇵 Japanese, 🇰🇷 Korean, 🇱🇻 Latvian, 🇱🇹 Lithuanian, 🇳🇴 Norwegian, 🇵🇱 Polish, 🇵🇹 Portuguese, 🇷🇴 Romanian, 🇷🇺 Russian, 🇷🇸 Serbian, 🇸🇰 Slovak, 🇸🇮 Slovenian, 🇪🇸 Spanish, 🇸🇪 Swedish, 🇹🇭 Thai, 🇹🇷 Turkish und 🇺🇦 Ukrainian.
Wenn Sie ein Tastaturlayout oder eine Region einrichten möchten, die nicht der Standard für Ihre ausgewählte Sprache ist, können Sie die Variablen KEYBOARD und REGION wie folgt hinzufügen:
environment:
REGION: "en-US"
KEYBOARD: "en-US"
Um ein nicht unterstütztes ISO-Image herunterzuladen, geben Sie dessen URL in der Umgebungsvariable VERSION an:
environment:
VERSION: "https://example.com/win.iso"
Alternativ können Sie den Download überspringen und stattdessen eine lokale Datei verwenden, indem Sie sie auf diese Weise in Ihrer Compose-Datei binden:
volumes:
- ./example.iso:/custom.iso
Ersetzen Sie den Beispielpfad ./example.iso durch den Dateinamen Ihrer gewünschten ISO-Datei. Der Wert von VERSION wird in diesem Fall ignoriert.
Um nach der Installation ein eigenes Skript auszuführen, erstellen Sie eine Datei mit dem Namen install.bat und legen Sie sie zusammen mit allen benötigten zusätzlichen Dateien (z. B. zu installierender Software) in einem Ordner ab.
Binden Sie diesen Ordner dann wie folgt in Ihre Compose-Datei ein:
volumes:
- ./example:/oem
Der Beispielordner ./example wird nach C:\OEM kopiert, und die Datei install.bat in diesem Ordner wird während des letzten Schritts der automatischen Installation ausgeführt.
Es wird empfohlen, bei der automatischen Installation zu bleiben, da sie verschiedene Einstellungen anpasst, um häufige Probleme bei der Ausführung von Windows in einer virtuellen Umgebung zu vermeiden.
Wenn Sie jedoch darauf bestehen, die Installation manuell durchzuführen (auf eigenes Risiko), fügen Sie Ihrer Compose-Datei die folgende Umgebungsvariable hinzu:
environment:
MANUAL: "Y"
Der Web-Viewer ist hauptsächlich für die Verwendung während der Installation gedacht, da er weniger reaktionsschnell als RDP ist und Funktionen wie die gemeinsame Nutzung der Zwischenablage nicht unterstützt.
Für ein besseres Erlebnis können Sie sich also mit einem beliebigen Microsoft-Remotedesktop-Client mit der IP des Containers verbinden, und zwar mit dem Benutzernamen Docker und dem Passwort admin.
Einen RDP-Client für Android gibt es im Play Store und einen für iOS im Apple Store. Für Linux können Sie FreeRDP verwenden, und unter Windows geben Sie einfach mstsc in das Suchfeld ein.
Audio ist standardmäßig deaktiviert, es sei denn, Sie verwenden RDP. Um es an den Browser zu streamen, fügen Sie die folgende Umgebungsvariable hinzu:
environment:
AUDIO: "Y"
Aktivieren Sie dann im Web-Viewer unter Einstellungen → Erweitert die Option Audio. Der Stream ist nur aktiv, solange diese Option aktiviert ist, und verbraucht ansonsten keine zusätzliche Bandbreite.
Standardmäßig verwendet der Container Bridge-Netzwerke, bei denen die IP-Adresse mit dem Host geteilt wird.
Wenn Sie dem Container eine individuelle IP-Adresse zuweisen möchten, können Sie wie folgt ein macvlan-Netzwerk erstellen:
docker network create -d macvlan \
--subnet=192.168.0.0/24 \
--gateway=192.168.0.1 \
--ip-range=192.168.0.100/28 \
-o parent=eth0 vlan
Ändern Sie diese Werte unbedingt so, dass sie zu Ihrem lokalen Subnetz passen.
Nachdem Sie das Netzwerk erstellt haben, ändern Sie Ihre Compose-Datei wie folgt:
services:
windows:
container_name: windows
..<snip>..
networks:
vlan:
ipv4_address: 192.168.0.100
networks:
vlan:
external: true
Ein zusätzlicher Vorteil dieses Ansatzes ist, dass Sie kein Port-Mapping mehr durchführen müssen, da standardmäßig alle Ports freigegeben werden.
[!IMPORTANT]
Diese IP-Adresse ist vom Docker-Host aus nicht erreichbar, da macvlan von Natur aus keine Kommunikation zwischen den beiden zulässt. Wenn dies ein Problem darstellt, müssen Sie als Workaround ein zweites macvlan erstellen.
Nachdem Sie den Container für macvlan konfiguriert haben, kann Windows Teil Ihres Heimnetzwerks werden, indem es wie ein echter PC eine IP von Ihrem Router anfordert.
Um diesen Modus zu aktivieren, in dem der Container und Windows separate IP-Adressen haben, fügen Sie Ihrer Compose-Datei die folgenden Zeilen hinzu:
environment:
DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
- 'c *:* rwm'
Um zusätzliche Festplatten zu erstellen, ändern Sie Ihre Compose-Datei wie folgt:
environment:
DISK2_SIZE: "32G"
DISK3_SIZE: "64G"
volumes:
- ./example2:/storage2
- ./example3:/storage3
Sie können Festplatten-Geräte oder Partitionen direkt durchreichen, indem Sie sie auf diese Weise zu Ihrer Compose-Datei hinzufügen:
devices:
- /dev/sdb:/disk1
- /dev/sdc1:/disk2
Verwenden Sie /disk1, wenn es Ihr Hauptlaufwerk werden soll (das während der Installation formatiert wird), und /disk2 und höher, um sie als sekundäre Laufwerke hinzuzufügen (die unangetastet bleiben).
Um ein USB-Gerät durchzureichen, ermitteln Sie zunächst seine Vendor- und Produkt-IDs mit dem Befehl lsusb und fügen Sie sie dann wie folgt zu Ihrer Compose-Datei hinzu:
environment:
ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
- /dev/bus/usb
[!WARNING]
Das Hinzufügen eines USB-Massenspeichergeräts vor Abschluss der Windows-Installation kann dazu führen, dass diese fehlschlägt. Oder schlimmer: Das Laufwerk kann als Systemfestplatte formatiert werden, und alle Ihre Daten gehen verloren! Halten Sie sie daher beim ersten Start des Containers immer getrennt.
Nein. Eine vollständige Übersicht aller unterstützten Einstellungen finden Sie auf der Seite Umgebungsvariablen.
Stellen Sie zunächst sicher, dass Ihre Plattform und Ihre Container-Laufzeitumgebung die oben aufgeführten Anforderungen erfüllen.
Installieren Sie auf einem Linux-Host cpu-checker und führen Sie Folgendes aus:
sudo apt install cpu-checker
sudo kvm-ok
Eine funktionierende Konfiguration sollte Folgendes melden:
KVM acceleration can be used
Sie können auch überprüfen, ob das KVM-Gerät vorhanden ist:
ls -l /dev/kvm
Falls KVM nicht verfügbar ist, prüfen Sie, ob:
Intel VT-x oder AMD-V) in Ihrem BIOS oder UEFI aktiviert ist.Wenn kvm-ok erfolgreich ist, der Container aber weiterhin meldet, dass KVM nicht verfügbar ist, können Sie vorübergehend privileged: true zu Ihrer Compose-Datei hinzufügen, um ein Berechtigungs- oder Gerätezugriffsproblem auszuschließen.
Sie können dafür dockur/macos verwenden. Es bietet viele derselben Funktionen, mit Ausnahme der automatischen Installation.
In diesem Fall können Sie qemus/qemu verwenden.
Ja, dieses Projekt enthält nur Open-Source-Code und vertreibt Windows selbst nicht. Alle im Code enthaltenen Produktschlüssel sind generische Installationsschlüssel, die von Microsoft zu Testzwecken veröffentlicht wurden, und keine gültigen Aktivierungslizenzen.
Sie sind dafür verantwortlich, dass Sie über eine gültige Windows-Lizenz verfügen und dass Ihre Nutzung den Lizenzbedingungen von Microsoft entspricht.
Die in diesem Projekt genannten Produktnamen, Logos, Marken und sonstigen Warenzeichen sind Eigentum ihrer jeweiligen Markeninhaber. Dieses Projekt ist nicht mit Microsoft Corporation verbunden, wird von ihr nicht gesponsert oder unterstützt.
| Wert | Version | Größe |
|---|
11 | Windows 11 Pro | 7.9 GB |
11l | Windows 11 LTSC | 4.7 GB |
11e | Windows 11 Enterprise | 6.6 GB |
10 | Windows 10 Pro | 5.7 GB |
10l | Windows 10 LTSC | 4.6 GB |
10e | Windows 10 Enterprise | 5.2 GB |
8e | Windows 8.1 Enterprise | 3.7 GB |
7u | Windows 7 Ultimate | 3.1 GB |
vu | Windows Vista Ultimate | 3.0 GB |
xp | Windows XP Professional | 0.6 GB |
2k | Windows 2000 Professional | 0.4 GB |
2025 | Windows Server 2025 | 7.6 GB |
2022 | Windows Server 2022 | 6.0 GB |
2019 | Windows Server 2019 | 5.3 GB |
2016 | Windows Server 2016 | 6.5 GB |
2012 | Windows Server 2012 | 4.3 GB |
2008 | Windows Server 2008 | 3.0 GB |
2003 | Windows Server 2003 | 0.6 GB |