
Executar Windows dentro de um container Docker com aceleração KVM, instalação automática e recursos personalizáveis. Suporta múltiplas versões do Windows, passagem de USB e rede macvlan.
Windows dentro de um contentor 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] O Docker Desktop no Linux, macOS e Windows 10 atualmente não fornece acesso KVM aos contentores e, portanto, não é suportado.
Muito simples! Estes são os passos:
Inicie o contentor e conecte-se à porta 8006 usando o seu navegador web.
Relaxe enquanto a mágica acontece, toda a instalação será realizada de forma totalmente automática.
Assim que vir a área de trabalho, a sua instalação do Windows está pronta para uso.
Aproveite a sua nova máquina e não se esqueça de dar uma estrela neste repositório!
Por padrão, o Windows 11 Pro será instalado. Mas pode adicionar a variável de ambiente VERSION ao seu ficheiro compose, para especificar uma versão alternativa do Windows a ser transferida:
environment:
VERSION: "10"
Selecione entre os valores abaixo:
[!TIP] Para instalar versões ARM64 do Windows, use dockur/windows-arm.
Para alterar a localização do armazenamento, inclua a seguinte montagem bind no seu ficheiro compose:
volumes:
- ./windows:/storage
Substitua o caminho de exemplo ./windows pela pasta de armazenamento ou volume nomeado desejado.
Para expandir o tamanho padrão de 64 GB, adicione a definição DISK_SIZE ao seu ficheiro compose e defina-o para a capacidade pretendida:
environment:
DISK_SIZE: "256G"
[!TIP] Isso também pode ser usado para redimensionar um disco existente para uma capacidade maior sem perda de dados. No entanto, precisará estender manualmente a partição do disco depois, pois o espaço de disco adicionado aparecerá como não alocado.
Após a instalação, haverá uma pasta chamada Shared na sua área de trabalho, que pode ser usada para trocar ficheiros com a máquina anfitriã.
Para selecionar uma pasta no anfitrião para este fim, inclua a seguinte montagem bind no seu ficheiro compose:
volumes:
- ./example:/shared
Substitua o caminho de exemplo ./example pela sua pasta partilhada desejada, que então se tornará visível como Shared.
Por padrão, o Windows poderá usar 2 núcleos de CPU e 4 GB de RAM.
Se quiser ajustar isso, pode especificar a quantidade desejada usando as seguintes variáveis de ambiente:
environment:
RAM_SIZE: "8G"
CPU_CORES: "4"
Por padrão, é criado um utilizador chamado Docker e a sua palavra-passe é admin.
Se quiser definir credenciais diferentes durante a instalação, pode configurá-las no seu ficheiro compose:
environment:
USERNAME: "bill"
PASSWORD: "gates"
Por padrão, a versão inglesa do Windows será transferida.
Mas pode adicionar a variável de ambiente LANGUAGE ao seu ficheiro compose, para especificar um idioma alternativo a ser transferido:
environment:
LANGUAGE: "French"
Pode escolher entre: 🇦🇪 Árabe, 🇧🇬 Búlgaro, 🇨🇳 Chinês, 🇭🇧 Croata, 🇨🇿 Checo, 🇩🇰 Dinamarquês, 🇳🇱 Holandês, 🇬🇧 Inglês, 🇪🇪 Estónio, 🇫🇮 Finlandês, 🇫🇷 Francês, 🇩🇪 Alemão, 🇬🇷 Grego, 🇮🇱 Hebraico, 🇭🇺 Húngaro, 🇮🇹 Italiano, 🇯🇵 Japonês, 🇰🇯 Coreano, 🇱🇻 Letão, 🇱🇹 Lituano, 🇳🇴 Norueguês, 🇵🇹 Polaco, 🇵🇹 Português, 🇷🇴 Romeno, 🇷🇺 Russo, 🇷🇸 Sérvio, 🇸🇮 Eslovaco, 🇸🇮 Esloveno, 🇪🇸 Espanhol, 🇸🇪 Sueco, 🇹🇭 Tailandês, 🇹🇷 Turco e 🇺🇦 Ucraniano.
Se quiser configurar um layout de teclado ou localidade que não seja o padrão para o idioma selecionado, pode adicionar as variáveis KEYBOARD e REGION assim:
environment:
REGION: "en-US"
KEYBOARD: "en-US"
Para transferir uma imagem ISO não suportada, especifique o seu URL na variável de ambiente VERSION:
environment:
VERSION: "https://example.com/win.iso"
Alternativamente, também pode saltar a transferência e usar um ficheiro local, vinculando-o no seu ficheiro compose desta forma:
volumes:
- ./example.iso:/custom.iso
Substitua o caminho de exemplo ./example.iso pelo nome do seu ficheiro ISO desejado. O valor de VERSION será ignorado neste caso.
Para executar o seu próprio script após a instalação, pode criar um ficheiro chamado install.bat e colocá-lo numa pasta juntamente com quaisquer ficheiros adicionais necessários (por exemplo, software a ser instalado).
Em seguida, vincule essa pasta no seu ficheiro compose assim:
volumes:
- ./example:/oem
A pasta de exemplo ./example será copiada para C:\OEM e o ficheiro install.bat dentro dessa pasta será executado durante o último passo da instalação automática.
Recomenda-se manter a instalação automática, pois ajusta várias definições para evitar problemas comuns ao executar Windows dentro de um ambiente virtual.
No entanto, se insistir em realizar a instalação manualmente (por sua conta e risco), adicione a seguinte variável de ambiente ao seu ficheiro compose:
environment:
MANUAL: "Y"
O visualizador web destina-se principalmente ao uso durante a instalação, pois é menos responsivo que o RDP e não suporta funcionalidades como partilha de área de transferência.
Assim, para uma melhor experiência, pode conectar-se usando qualquer cliente Microsoft Remote Desktop ao IP do contentor, usando o nome de utilizador Docker e a palavra-passe admin.
Existe um cliente RDP para Android disponível na Play Store e um para iOS na Apple Store. Para Linux pode usar FreeRDP e no Windows basta escrever mstsc na caixa de pesquisa.
O áudio está desativado por padrão, a menos que esteja a usar RDP. Para transmiti-lo para o navegador, adicione a seguinte variável de ambiente:
environment:
AUDIO: "Y"
Em seguida, ative Áudio em Definições → Avançadas no visualizador web. A transmissão está ativa apenas enquanto esta opção estiver ativada, portanto, não consome largura de banda extra caso contrário.
Por padrão, o contentor usa rede bridge, que partilha o endereço IP com o anfitrião.
Se quiser atribuir um endereço IP individual ao contentor, pode criar uma rede macvlan da seguinte forma:
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
Certifique-se de modificar esses valores para corresponder à sua sub-rede local.
Após criar a rede, altere o seu ficheiro compose para o seguinte:
services:
windows:
container_name: windows
..<snip>..
networks:
vlan:
ipv4_address: 192.168.0.100
networks:
vlan:
external: true
Uma vantagem adicional desta abordagem é que não precisará mais de fazer mapeamento de portas, pois todas as portas serão expostas por padrão.
[!IMPORTANTE]
Este endereço IP não será acessível a partir do anfitrião Docker devido ao design do macvlan, que não permite comunicação entre os dois. Se isso for uma preocupação, precisa de criar um segundo macvlan como solução alternativa.
Após configurar o contentor para macvlan, é possível que o Windows se torne parte da sua rede doméstica solicitando um IP ao seu router, tal como um PC real.
Para ativar este modo, no qual o contentor e o Windows terão endereços IP separados, adicione as seguintes linhas ao seu ficheiro compose:
environment:
DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
- 'c *:* rwm'
Para criar discos adicionais, modifique o seu ficheiro compose assim:
environment:
DISK2_SIZE: "32G"
DISK3_SIZE: "64G"
volumes:
- ./example2:/storage2
- ./example3:/storage3
Pode passar dispositivos de disco ou partições diretamente, adicionando-os ao seu ficheiro compose desta forma:
devices:
- /dev/sdb:/disk1
- /dev/sdc1:/disk2
Use /disk1 se quiser que se torne a sua unidade principal (que será formatada durante a instalação) e use /disk2 e superiores para adicioná-los como unidades secundárias (que permanecerão intocadas).
Para passar um dispositivo USB, primeiro procure os seus IDs de fabricante e produto através do comando lsusb, depois adicione-os ao seu ficheiro compose assim:
environment:
ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
- /dev/bus/usb
[!AVISO]
Adicionar um dispositivo de armazenamento USB antes da Configuração do Windows terminar pode fazê-la falhar. Ou pior: a unidade pode ser formatada como disco do sistema, e todos os seus dados serão perdidos! Portanto, mantenha-os sempre desconectados ao iniciar o contentor pela primeira vez.
Não. Para uma visão geral completa de todas as definições suportadas, veja a página de variáveis de ambiente.
Primeiro, certifique-se de que a sua plataforma e runtime do contentor cumprem os requisitos listados acima.
Num anfitrião Linux, instale o cpu-checker e execute:
sudo apt install cpu-checker
sudo kvm-ok
Uma configuração funcional deve reportar:
KVM acceleration can be used
Também pode verificar se o dispositivo KVM existe:
ls -l /dev/kvm
Se o KVM não estiver disponível, verifique se:
Intel VT-x ou AMD-V) está ativada na sua BIOS ou UEFI.Se kvm-ok for bem-sucedido, mas o contentor ainda reportar que o KVM não está disponível, pode adicionar temporariamente privileged: true ao seu ficheiro Compose para descartar um problema de permissão ou acesso ao dispositivo.
Pode usar dockur/macos para isso. Partilha muitas das mesmas funcionalidades, exceto a instalação automática.
Pode usar qemus/qemu nesse caso.
Sim, este projeto contém apenas código de código aberto e não distribui o Windows propriamente dito. Quaisquer chaves de produto encontradas no código são chaves de instalação genéricas publicadas pela Microsoft para fins de teste e não são licenças de ativação válidas.
É responsável por garantir que possui uma licença válida do Windows e que o seu uso cumpre os termos de licenciamento da Microsoft.
Os nomes de produtos, logótipos, marcas e outras marcas registadas referidas neste projeto são propriedade dos seus respetivos titulares. Este projeto não é afiliado, patrocinado ou endossado pela Microsoft Corporation.
| Valor | Versão | Tamanho |
|---|
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 |