
Esegui Windows all'interno di un container Docker con accelerazione KVM, installazione automatica e risorse personalizzabili. Supporta più versioni di Windows, pass-through USB e networking macvlan.
Esegui Windows all'interno di un container Docker.
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 su Linux, macOS e Windows 10 attualmente non fornisce accesso KVM ai container e pertanto non è supportato.
Molto semplice! Ecco i passaggi:
Avvia il container e connettiti alla porta 8006 usando il tuo browser web.
Rilassati mentre la magia accade; l'intera installazione verrà eseguita automaticamente.
Una volta visualizzato il desktop, la tua installazione di Windows è pronta all'uso.
Goditi la tua nuova macchina e non dimenticare di mettere una stella a questo repo!
Per impostazione predefinita verrà installato Windows 11 Pro. Puoi aggiungere la variabile d'ambiente VERSION al tuo file compose, per specificare una versione alternativa di Windows da scaricare:
environment:
VERSION: "10"
Scegli tra i valori seguenti:
[!TIP] Per installare versioni ARM64 di Windows usa dockur/windows-arm.
Per cambiare la posizione di archiviazione, includi il seguente bind mount nel tuo file compose:
volumes:
- ./windows:/storage
Sostituisci il percorso di esempio ./windows con la cartella di archiviazione o il volume nominato desiderato.
Per espandere la dimensione predefinita di 64 GB, aggiungi l'impostazione DISK_SIZE al tuo file compose e impostala sulla capacità preferita:
environment:
DISK_SIZE: "256G"
[!TIP] Questo può essere usato anche per ridimensionare un disco esistente a una capacità maggiore senza perdita di dati. Tuttavia, dovrai estendere manualmente la partizione del disco successivamente, poiché lo spazio disco aggiunto apparirà come non allocato.
Dopo l'installazione, sul desktop sarà presente una cartella chiamata Shared che può essere utilizzata per scambiare file con la macchina host.
Per selezionare una cartella sull'host a questo scopo, includi il seguente bind mount nel tuo file compose:
volumes:
- ./example:/shared
Sostituisci il percorso di esempio ./example con la cartella condivisa desiderata, che diventerà quindi visibile come Shared.
Per impostazione predefinita, Windows potrà utilizzare 2 core CPU e 4 GB di RAM.
Se vuoi regolare questo valore, puoi specificare la quantità desiderata utilizzando le seguenti variabili d'ambiente:
environment:
RAM_SIZE: "8G"
CPU_CORES: "4"
Per impostazione predefinita, viene creato un utente chiamato Docker e la sua password è admin.
Se desideri impostare credenziali diverse durante l'installazione, puoi configurarle nel tuo file compose:
environment:
USERNAME: "bill"
PASSWORD: "gates"
Per impostazione predefinita, verrà scaricata la versione inglese di Windows.
Ma puoi aggiungere la variabile d'ambiente LANGUAGE al tuo file compose per specificare una lingua alternativa da scaricare:
environment:
LANGUAGE: "French"
Puoi scegliere tra: 🇦🇪 Arabo, 🇧🇬 Bulgaro, 🇨🇳 Cinese, 🇭🇷 Croato, 🇨🇿 Ceco, 🇩🇰 Danese, 🇳🇱 Olandese, 🇬🇧 Inglese, 🇪🇪 Estone, 🇫🇮 Finlandese, 🇫🇷 Francese, 🇩🇪 Tedesco, 🇬🇷 Greco, 🇮🇱 Ebraico, 🇭🇺 Ungherese, 🇮🇹 Italiano, 🇯🇵 Giapponese, 🇰🇷 Coreano, 🇱🇻 Lettone, 🇱🇹 Lituano, 🇳🇴 Norvegese, 🇵🇱 Polacco, 🇵🇹 Portoghese, 🇷🇴 Rumeno, 🇷🇺 Russo, 🇷🇸 Serbo, 🇸🇰 Slovacco, 🇸🇮 Sloveno, 🇪🇸 Spagnolo, 🇸🇪 Svedese, 🇹🇭 Thailandese, 🇹🇷 Turco e 🇺🇦 Ucraino.
Se desideri impostare un layout di tastiera o una lingua che non sia quello predefinito per la lingua selezionata, puoi aggiungere le variabili KEYBOARD e REGION in questo modo:
environment:
REGION: "en-US"
KEYBOARD: "en-US"
Per scaricare un'immagine ISO non supportata, specifica il suo URL nella variabile d'ambiente VERSION:
environment:
VERSION: "https://example.com/win.iso"
In alternativa, puoi anche saltare il download e utilizzare un file locale, associandolo nel tuo file compose in questo modo:
volumes:
- ./example.iso:/custom.iso
Sostituisci il percorso di esempio ./example.iso con il nome del file ISO desiderato. Il valore di VERSION verrà ignorato in questo caso.
Per eseguire il tuo script dopo l'installazione, crea un file chiamato install.bat e posizionalo in una cartella insieme a tutti i file aggiuntivi di cui ha bisogno (ad esempio software da installare).
Quindi associa quella cartella nel tuo file compose in questo modo:
volumes:
- ./example:/oem
La cartella di esempio ./example verrà copiata in C:\OEM e il file install.bat all'interno di quella cartella verrà eseguito durante l'ultimo passaggio dell'installazione automatica.
Si consiglia di attenersi all'installazione automatica, poiché regola varie impostazioni per prevenire problemi comuni durante l'esecuzione di Windows in un ambiente virtuale.
Tuttavia, se insisti per eseguire l'installazione manualmente (a tuo rischio), aggiungi la seguente variabile d'ambiente al tuo file compose:
environment:
MANUAL: "Y"
Il visualizzatore web è pensato principalmente per l'uso durante l'installazione, poiché è meno reattivo dell'RDP e non supporta funzionalità come la condivisione degli appunti.
Quindi per un'esperienza migliore puoi connetterti utilizzando qualsiasi client Microsoft Remote Desktop all'IP del container, usando il nome utente Docker e la password admin.
Esiste un client RDP per Android disponibile sul Play Store e uno per iOS nell'Apple Store. Per Linux puoi usare FreeRDP e su Windows digita semplicemente mstsc nella casella di ricerca.
L'audio è disabilitato per impostazione predefinita a meno che non si utilizzi RDP. Per riprodurlo nel browser, aggiungi la seguente variabile d'ambiente:
environment:
AUDIO: "Y"
Quindi abilita Audio in Impostazioni → Avanzate nel visualizzatore web. Lo streaming è attivo solo mentre questa opzione è abilitata, quindi non utilizza larghezza di banda aggiuntiva in caso contrario.
Per impostazione predefinita, il container utilizza la rete bridge, che condivide l'indirizzo IP con l'host.
Se desideri assegnare un indirizzo IP individuale al container, puoi creare una rete macvlan come segue:
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
Assicurati di modificare questi valori in modo che corrispondano alla tua subnet locale.
Una volta creata la rete, modifica il tuo file compose come segue:
services:
windows:
container_name: windows
..<snip>..
networks:
vlan:
ipv4_address: 192.168.0.100
networks:
vlan:
external: true
Un ulteriore vantaggio di questo approccio è che non dovrai più eseguire il mapping delle porte, poiché tutte le porte saranno esposte per impostazione predefinita.
[!IMPORTANT]
Questo indirizzo IP non sarà accessibile dall'host Docker a causa della progettazione di macvlan, che non consente la comunicazione tra i due. Se questo è un problema, è necessario creare un secondo macvlan come soluzione alternativa.
Dopo aver configurato il container per macvlan, è possibile che Windows diventi parte della tua rete domestica richiedendo un IP dal tuo router, proprio come un vero PC.
Per abilitare questa modalità, in cui il container e Windows avranno indirizzi IP separati, aggiungi le seguenti righe al tuo file compose:
environment:
DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
- 'c *:* rwm'
Per creare dischi aggiuntivi, modifica il tuo file compose in questo modo:
environment:
DISK2_SIZE: "32G"
DISK3_SIZE: "64G"
volumes:
- ./example2:/storage2
- ./example3:/storage3
Puoi passare attraverso dispositivi di blocco o partizioni direttamente aggiungendoli al tuo file compose in questo modo:
devices:
- /dev/sdb:/disk1
- /dev/sdc1:/disk2
Usa /disk1 se vuoi che diventi il tuo disco principale (che verrà formattato durante l'installazione) e usa /disk2 e superiori per aggiungerli come dischi secondari (che rimarranno intatti).
Per passare attraverso un dispositivo USB, cerca prima i suoi ID vendor e product tramite il comando lsusb, quindi aggiungili al tuo file compose in questo modo:
environment:
ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
- /dev/bus/usb
[!WARNING]
Aggiungere un dispositivo di archiviazione di massa USB prima che l'installazione di Windows sia completata potrebbe causare un errore. O peggio: l'unità potrebbe essere formattata come disco di sistema e tutti i tuoi dati andranno persi! Quindi tienili sempre scollegati quando avvii il container per la prima volta.
No. Per una panoramica completa di tutte le impostazioni supportate, consulta la pagina delle variabili d'ambiente.
Innanzitutto, assicurati che la tua piattaforma e il runtime del container soddisfino i requisiti elencati sopra.
Su un host Linux, installa cpu-checker ed esegui:
sudo apt install cpu-checker
sudo kvm-ok
Una configurazione funzionante dovrebbe riportare:
KVM acceleration can be used
Puoi anche verificare che il dispositivo KVM esista:
ls -l /dev/kvm
Se KVM non è disponibile, controlla se:
Intel VT-x o AMD-V) è abilitata nel BIOS o UEFI.Se kvm-ok ha successo ma il container segnala ancora che KVM non è disponibile, puoi aggiungere temporaneamente privileged: true al tuo file Compose per escludere un problema di autorizzazione o accesso al dispositivo.
Puoi utilizzare dockur/macos per quello. Condivide molte delle stesse caratteristiche, tranne l'installazione automatica.
In tal caso puoi utilizzare qemus/qemu.
Sì, questo progetto contiene solo codice open source e non distribuisce Windows stesso. Eventuali chiavi di prodotto trovate nel codice sono chiavi di installazione generiche pubblicate da Microsoft per scopi di valutazione e non sono licenze di attivazione valide.
Sei responsabile di assicurarti di avere una licenza Windows valida e che il tuo utilizzo sia conforme ai termini di licenza di Microsoft.
I nomi dei prodotti, loghi, marchi e altri marchi registrati a cui si fa riferimento in questo progetto sono di proprietà dei rispettivi titolari. Questo progetto non è affiliato, sponsorizzato o approvato da Microsoft Corporation.
| Valore | Versione | Dimensione |
|---|
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 |