Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
windows — 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. | Kitploit
Herramientas/GitHubGitHub/dockur/windows
Utilidades de Propósito GeneralSeguridad de ContenedoresVirtualización de SeguridadSeguridad en la Nube
GitHubdockur/windows

windows

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.

Ver Repositorio
52.8k4.6k62hace 16 díasRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
<h1 align="center">Windows<br />
<div align="center">
<a href="https://github.com/dockur/windows"><img src="https://raw.githubusercontent.com/dockur/windows/master/.github/logo.png" title="Logo" style="max-width:100%;" width="96" /></a>
</div>
<div align="center">

[![Build]][build_url]
[![Version]][tag_url]
[![Size]][tag_url]
[![Package]][pkg_url]
[![Pulls]][hub_url]

</div></h1>

Windows dentro de un contenedor Docker.

## Características ✨

- Ejecuta Windows dentro de un contenedor Docker
- Descarga automática e instalación sin intervención
- Soporta versiones modernas y antiguas de Windows
- Rendimiento casi nativo con aceleración KVM
- Asignación personalizable de CPU, memoria y almacenamiento
- Asignación dinámica de memoria con globo de memoria
- Paso de dispositivos USB y compartición de carpetas del anfitrión
- Soporta redes NAT, modo usuario, macvlan y macvtap

## Vídeo 📺

[![YouTube](https://assets.kitploit.com/production/public/readmes/8002/385d83d323911ea44b233b3d962a8c34a2909ab01a2ba3a525946ce7025a1df3.jpg)](https://www.youtube.com/watch?v=xhGYobuG508)

## Uso 🐳

##### Docker Compose:

```yaml
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 CLI:

```bash
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
```

##### Kubernetes:

```shell
kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml
```

##### GitHub Codespaces:

[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/dockur/windows)

##### Instalador gráfico:

[![Download WinBoat](https://raw.githubusercontent.com/dockur/windows/master/.github/winboat.png)](https://winboat.app)

## Requisitos ⚙️

- Docker o Podman en un anfitrión Linux con soporte KVM.
- Docker Desktop o Podman (Desktop) en Windows 11 con virtualización anidada habilitada.
- Al menos 4 GB de RAM disponible.
- Al menos 64 GB de espacio libre en disco.

> [!NOTE]
> Docker Desktop en Linux, macOS y Windows 10 actualmente no proporciona acceso KVM a los contenedores y por lo tanto no es compatible.

## FAQ 💬

### ¿Cómo lo uso?

  ¡Muy sencillo! Estos son los pasos:
  
  - Inicia el contenedor y conéctate al [puerto 8006](http://127.0.0.1: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!

### ¿Cómo selecciono la versión de Windows?

  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á:

  ```yaml
  environment:
    VERSION: "10"
  ```

  Selecciona entre los valores siguientes:
  
  | **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   |

> [!TIP]
> Para instalar versiones ARM64 de Windows usa [dockur/windows-arm](https://github.com/dockur/windows-arm/).

### ¿Cómo cambio la ubicación de almacenamiento?

  Para cambiar la ubicación de almacenamiento, incluye el siguiente montaje bind en tu archivo compose:

  ```yaml
  volumes:
    - ./windows:/storage
  ```

  Reemplaza la ruta de ejemplo `./windows` con la carpeta de almacenamiento o volumen nombrado deseado.

### ¿Cómo cambio el tamaño del disco?

  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:

  ```yaml
  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](https://learn.microsoft.com/es-es/windows-server/storage/disk-management/extend-a-basic-volume?tabs=disk-management) después, ya que el espacio adicional aparecerá como no asignado.

### ¿Cómo comparto archivos con el anfitrión?

  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:

  ```yaml
  volumes:
    -  ./example:/shared
  ```

  Reemplaza la ruta de ejemplo `./example` con la carpeta compartida deseada, que entonces se hará visible como `Shared`.

### ¿Cómo cambio la cantidad de CPU o RAM?

  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:

  ```yaml
  environment:
    RAM_SIZE: "8G"
    CPU_CORES: "4"
  ```

### ¿Cómo configuro el nombre de usuario y la contraseña?

  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:

  ```yaml
  environment:
    USERNAME: "bill"
    PASSWORD: "gates"
  ```

### ¿Cómo selecciono el idioma de Windows?

  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á:

  ```yaml
  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.

### ¿Cómo selecciono la distribución del teclado?

  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:

  ```yaml
  environment:
    REGION: "en-US"
    KEYBOARD: "en-US"
  ```

### ¿Cómo instalo una imagen personalizada?

  Para descargar una imagen ISO no compatible, especifica su URL en la variable de entorno `VERSION`:
  
  ```yaml
  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:
  
  ```yaml
  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.

### ¿Cómo ejecuto un script después de la instalación?

  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:

  ```yaml
  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.

### ¿Cómo realizo una instalación manual?

  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:

  ```yaml
  environment:
    MANUAL: "Y"
  ```

### ¿Cómo me conecto usando RDP?

  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](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) disponible en Play Store y uno para [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) en la Apple Store. Para Linux puedes usar [FreeRDP](https://www.freerdp.com/) y en Windows simplemente escribe `mstsc` en el cuadro de búsqueda.

### ¿Cómo habilito el audio?

  El audio está desactivado por defecto a menos que uses RDP. Para transmitirlo al navegador, añade la siguiente variable de entorno:

  ```yaml
  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.

### ¿Cómo asigno una dirección IP individual al contenedor?

  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:

  ```bash
  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í:

  ```yaml
  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](https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/#host-access) como solución.

### ¿Cómo puede Windows adquirir una dirección IP de mi router?

  Después de configurar el contenedor para [macvlan](#cómo-asigno-una-dirección-ip-individual-al-contenedor), 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:

  ```yaml
  environment:
    DHCP: "Y"
  devices:
    - /dev/vhost-net
  device_cgroup_rules:
    - 'c *:* rwm'
  ```

### ¿Cómo agrego múltiples discos?

  Para crear discos adicionales, modifica tu archivo compose de la siguiente manera:
  
  ```yaml
  environment:
    DISK2_SIZE: "32G"
    DISK3_SIZE: "64G"
  volumes:
    - ./example2:/storage2
    - ./example3:/storage3
  ```

### ¿Cómo paso un disco?

  Puedes pasar dispositivos o particiones de disco directamente añadiéndolos a tu archivo compose de esta manera:

  ```yaml
  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).

### ¿Cómo paso un dispositivo USB?

  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:

  ```yaml
  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.

### ¿Son todas estas las opciones disponibles?

  No. Para una visión completa de todas las configuraciones soportadas, consulta la página de [variables de entorno](https://github.com/dockur/windows/blob/master/docs/environment.md).

### ¿Cómo verifico que KVM está disponible?

  Primero, asegúrate de que tu plataforma y runtime de contenedor cumplan con los [requisitos](#requisitos-️) listados anteriormente.

  En un anfitrión Linux, instala `cpu-checker` y ejecuta:

  ```bash
  sudo apt install cpu-checker
  sudo kvm-ok
  ```

  Una configuración funcional debería informar:

  ```text
  KVM acceleration can be used
  ```

  También puedes verificar que el dispositivo KVM existe:

  ```bash
  ls -l /dev/kvm
  ```

  Si KVM no está disponible, verifica si:

  - La virtualización por hardware (`Intel VT-x` o `AMD-V`) está habilitada en tu BIOS o UEFI.
  - La virtualización anidada está habilitada cuando el anfitrión mismo es una máquina virtual.
  - Tu VPS o proveedor de nube admite virtualización anidada.

  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.

### ¿Cómo ejecuto macOS en un contenedor?

  Puedes usar [dockur/macos](https://github.com/dockur/macos) para eso. Comparte muchas de las mismas características, excepto la instalación automática.

### ¿Cómo ejecuto un escritorio Linux en un contenedor?

  Puedes usar [qemus/qemu](https://github.com/qemus/qemu) en ese caso.

### ¿Es legal este proyecto?

  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.

## Estrellas 🌟
[![Stargazers](https://raw.githubusercontent.com/star-stats/stars/refs/heads/data/charts/dockur-windows.svg)](https://github.com/dockur/windows/stargazers)

## Aviso legal ⚖️

*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.*

[build_url]: https://github.com/dockur/windows/
[hub_url]: https://hub.docker.com/r/dockurr/windows/
[tag_url]: https://hub.docker.com/r/dockurr/windows/tags
[pkg_url]: https://github.com/dockur/windows/pkgs/container/windows

[Build]: https://github.com/dockur/windows/actions/workflows/build.yml/badge.svg
[Size]: https://img.shields.io/docker/image-size/dockurr/windows/latest?color=066da5&label=size
[Pulls]: https://img.shields.io/docker/pulls/dockurr/windows.svg?style=flat&label=pulls&logo=docker
[Version]: https://img.shields.io/docker/v/dockurr/windows/latest?arch=amd64&sort=semver&color=066da5
[Package]: https://img.shields.io/badge/dynamic/json?url=https://ipitio.github.io/backage/dockur/windows/windows.json&query=$.downloads&logo=github&style=flat&color=066da5&label=pulls
Descargar herramienta