
Ejecuta Windows dentro de un contenedor Docker con aceleración KVM, instalación automática y recursos personalizables. Soporta múltiples versiones de Windows, paso de USB y redes macvlan.
Windows dentro de un contenedor 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 en Linux, macOS y Windows 10 actualmente no proporciona acceso KVM a los contenedores y por lo tanto no es compatible.
¡Muy sencillo! Estos son los pasos:
Inicia el contenedor y conéctate al puerto 8006 usando tu navegador web.
Siéntate y relájate mientras ocurre la magia; toda la instalación se realizará de forma totalmente automática.
Una vez que veas el escritorio, tu instalación de Windows está lista para usar.
¡Disfruta de tu nueva máquina y no olvides dejar una estrella en este repositorio!
Por defecto, se instalará Windows 11 Pro. Pero puedes añadir la variable de entorno VERSION a tu archivo compose para especificar una versión alternativa de Windows que se descargará:
environment:
VERSION: "10"
Selecciona entre los valores siguientes:
[!TIP] Para instalar versiones ARM64 de Windows usa dockur/windows-arm.
Para cambiar la ubicación de almacenamiento, incluye el siguiente montaje bind en tu archivo compose:
volumes:
- ./windows:/storage
Reemplaza la ruta de ejemplo ./windows con la carpeta de almacenamiento o volumen nombrado deseado.
Para ampliar el tamaño predeterminado de 64 GB, añade la configuración DISK_SIZE a tu archivo compose y ajústala a la capacidad deseada:
environment:
DISK_SIZE: "256G"
[!TIP] Esto también se puede usar para redimensionar un disco existente a una capacidad mayor sin pérdida de datos. Sin embargo, necesitarás extender manualmente la partición del disco después, ya que el espacio adicional aparecerá como no asignado.
Después de la instalación, habrá una carpeta llamada Shared en tu escritorio, que se puede usar para intercambiar archivos con la máquina anfitriona.
Para seleccionar una carpeta en el anfitrión con este propósito, incluye el siguiente montaje bind en tu archivo compose:
volumes:
- ./example:/shared
Reemplaza la ruta de ejemplo ./example con la carpeta compartida deseada, que entonces se hará visible como Shared.
Por defecto, a Windows se le permitirá usar 2 núcleos de CPU y 4 GB de RAM.
Si deseas ajustar esto, puedes especificar la cantidad deseada usando las siguientes variables de entorno:
environment:
RAM_SIZE: "8G"
CPU_CORES: "4"
Por defecto, se crea un usuario llamado Docker y su contraseña es admin.
Si deseas establecer credenciales diferentes durante la instalación, puedes configurarlas en tu archivo compose:
environment:
USERNAME: "bill"
PASSWORD: "gates"
Por defecto, se descargará la versión en inglés de Windows.
Pero puedes añadir la variable de entorno LANGUAGE a tu archivo compose para especificar un idioma alternativo que se descargará:
environment:
LANGUAGE: "French"
Puedes elegir entre: 🇦🇪 Árabe, 🇧🇬 Búlgaro, 🇨🇳 Chino, 🇭🇷 Croata, 🇨🇿 Checo, 🇩🇰 Danés, 🇳🇱 Neerlandés, 🇬🇧 Inglés, 🇪🇪 Estonio, 🇫🇮 Finés, 🇫🇷 Francés, 🇩🇪 Alemán, 🇬🇷 Griego, 🇮🇱 Hebreo, 🇭🇺 Húngaro, 🇮🇹 Italiano, 🇯🇵 Japonés, 🇰🇷 Coreano, 🇱🇻 Letón, 🇱🇹 Lituano, 🇳🇴 Noruego, 🇵🇱 Polaco, 🇵🇹 Portugués, 🇷🇴 Rumano, 🇷🇺 Ruso, 🇷🇸 Serbio, 🇸🇰 Eslovaco, 🇸🇮 Esloveno, 🇪🇸 Español, 🇸🇪 Sueco, 🇹🇭 Tailandés, 🇹🇷 Turco y 🇺🇦 Ucraniano.
Si deseas configurar una distribución del teclado o configuración regional que no sea la predeterminada para el idioma seleccionado, puedes añadir las variables KEYBOARD y REGION de esta manera:
environment:
REGION: "en-US"
KEYBOARD: "en-US"
Para descargar una imagen ISO no compatible, especifica su URL en la variable de entorno VERSION:
environment:
VERSION: "https://example.com/win.iso"
Alternativamente, también puedes omitir la descarga y usar un archivo local en su lugar, vinculándolo en tu archivo compose de esta manera:
volumes:
- ./example.iso:/custom.iso
Reemplaza la ruta de ejemplo ./example.iso con el nombre de archivo de tu ISO deseado. El valor de VERSION se ignorará en este caso.
Para ejecutar tu propio script después de la instalación, puedes crear un archivo llamado install.bat y colocarlo en una carpeta junto con cualquier archivo adicional que necesite (por ejemplo, software a instalar).
Luego, vincula esa carpeta en tu archivo compose de la siguiente manera:
volumes:
- ./example:/oem
La carpeta de ejemplo ./example se copiará a C:\OEM y el archivo install.bat dentro de esa carpeta se ejecutará durante el último paso de la instalación automática.
Se recomienda mantener la instalación automática, ya que ajusta varias configuraciones para evitar problemas comunes al ejecutar Windows en un entorno virtualizado.
Sin embargo, si insistes en realizar la instalación manualmente (bajo tu propio riesgo), añade la siguiente variable de entorno a tu archivo compose:
environment:
MANUAL: "Y"
El visor web está pensado principalmente para usarse durante la instalación, ya que es menos sensible que RDP y no admite funciones como compartir el portapapeles.
Por lo tanto, para una mejor experiencia puedes conectarte usando cualquier cliente de Microsoft Remote Desktop a la IP del contenedor, utilizando el nombre de usuario Docker y la contraseña admin.
Hay un cliente RDP para Android disponible en Play Store y uno para iOS en la Apple Store. Para Linux puedes usar FreeRDP y en Windows simplemente escribe mstsc en el cuadro de búsqueda.
El audio está desactivado por defecto a menos que uses RDP. Para transmitirlo al navegador, añade la siguiente variable de entorno:
environment:
AUDIO: "Y"
Luego activa Audio en Configuración → Avanzado en el visor web. La transmisión solo está activa mientras esta opción esté habilitada, por lo que no utiliza ancho de banda adicional en caso contrario.
Por defecto, el contenedor utiliza red puente, que comparte la dirección IP con el anfitrión.
Si deseas asignar una dirección IP individual al contenedor, puedes crear una red macvlan de la siguiente manera:
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
Asegúrate de modificar estos valores para que coincidan con tu subred local.
Una vez que hayas creado la red, cambia tu archivo compose para que se vea así:
services:
windows:
container_name: windows
..<snip>..
networks:
vlan:
ipv4_address: 192.168.0.100
networks:
vlan:
external: true
Un beneficio adicional de este enfoque es que no tendrás que realizar ningún mapeo de puertos, ya que todos los puertos estarán expuestos por defecto.
[!IMPORTANT]
Esta dirección IP no será accesible desde el anfitrión Docker debido al diseño de macvlan, que no permite la comunicación entre ambos. Si esto es un problema, debes crear un segundo macvlan como solución.
Después de configurar el contenedor para macvlan, es posible que Windows pase a formar parte de tu red doméstica solicitando una IP a tu router, como un PC real.
Para habilitar este modo, en el que el contenedor y Windows tendrán direcciones IP separadas, añade las siguientes líneas a tu archivo compose:
environment:
DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
- 'c *:* rwm'
Para crear discos adicionales, modifica tu archivo compose de la siguiente manera:
environment:
DISK2_SIZE: "32G"
DISK3_SIZE: "64G"
volumes:
- ./example2:/storage2
- ./example3:/storage3
Puedes pasar dispositivos o particiones de disco directamente añadiéndolos a tu archivo compose de esta manera:
devices:
- /dev/sdb:/disk1
- /dev/sdc1:/disk2
Usa /disk1 si deseas que se convierta en tu unidad principal (que se formateará durante la instalación), y usa /disk2 y superiores para añadirlos como unidades secundarias (que permanecerán intactas).
Para pasar un dispositivo USB, primero consulta sus IDs de proveedor y producto mediante el comando lsusb, luego agrégalos a tu archivo compose de la siguiente manera:
environment:
ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
- /dev/bus/usb
[!WARNING]
Agregar un dispositivo de almacenamiento masivo USB antes de que finalice la instalación de Windows puede causar que falle. O peor: la unidad puede formatearse como el disco del sistema y ¡todos tus datos se perderán! Así que mantenlos siempre desconectados al iniciar el contenedor por primera vez.
No. Para una visión completa de todas las configuraciones soportadas, consulta la página de variables de entorno.
Primero, asegúrate de que tu plataforma y runtime de contenedor cumplan con los requisitos listados anteriormente.
En un anfitrión Linux, instala cpu-checker y ejecuta:
sudo apt install cpu-checker
sudo kvm-ok
Una configuración funcional debería informar:
KVM acceleration can be used
También puedes verificar que el dispositivo KVM existe:
ls -l /dev/kvm
Si KVM no está disponible, verifica si:
Intel VT-x o AMD-V) está habilitada en tu BIOS o UEFI.Si kvm-ok tiene éxito pero el contenedor aún informa que KVM no está disponible, puedes agregar temporalmente privileged: true a tu archivo Compose para descartar un problema de permisos o acceso a dispositivos.
Puedes usar dockur/macos para eso. Comparte muchas de las mismas características, excepto la instalación automática.
Puedes usar qemus/qemu en ese caso.
Sí, este proyecto contiene solo código de código abierto y no distribuye Windows en sí. Cualquier clave de producto encontrada en el código son claves de instalación genéricas publicadas por Microsoft para fines de prueba y no son licencias de activación válidas.
Eres responsable de asegurarte de que tienes una licencia válida de Windows y de que tu uso cumple con los términos de licencia de Microsoft.
Los nombres de productos, logotipos, marcas y otras marcas comerciales mencionadas dentro de este proyecto son propiedad de sus respectivos titulares. Este proyecto no está afiliado, patrocinado ni respaldado por Microsoft Corporation.
| Valor | Versión | Tamaño |
|---|
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 |