
Запускайте Windows внутри Docker-контейнера с KVM-ускорением, автоматической установкой и настраиваемыми ресурсами. Поддерживает несколько версий Windows, проброс USB и сеть macvlan.
Windows в 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 на Linux, macOS и Windows 10 в настоящее время не предоставляет контейнерам доступ к KVM и поэтому не поддерживается.
Очень просто! Вот шаги:
Запустите контейнер и подключитесь к порту 8006 через веб-браузер.
Расслабьтесь и наблюдайте за магией: вся установка будет выполнена полностью автоматически.
Когда вы увидите рабочий стол, ваша установка Windows готова к использованию.
Наслаждайтесь своей новой машиной и не забудьте поставить звезду этому репозиторию!
По умолчанию будет установлена Windows 11 Pro. Но вы можете добавить переменную окружения VERSION в ваш compose-файл, чтобы указать альтернативную версию Windows для загрузки:
environment:
VERSION: "10"
Выберите одно из значений ниже:
[!TIP] Для установки ARM64-версий Windows используйте dockur/windows-arm.
Чтобы изменить расположение хранилища, добавьте следующий bind-mount в ваш compose-файл:
volumes:
- ./windows:/storage
Замените пример пути ./windows на нужную папку хранилища или именованный том.
Чтобы увеличить размер по умолчанию (64 ГБ), добавьте параметр DISK_SIZE в ваш compose-файл и укажите желаемый объём:
environment:
DISK_SIZE: "256G"
[!TIP] Его также можно использовать для увеличения существующего диска без потери данных. Однако после этого вам потребуется вручную расширить раздел диска, так как добавленное пространство будет отображаться как нераспределённое.
После установки на рабочем столе появится папка под названием Shared, которую можно использовать для обмена файлами с хост-машиной.
Чтобы выбрать для этой цели папку на хосте, добавьте следующий bind-mount в ваш compose-файл:
volumes:
- ./example:/shared
Замените пример пути ./example на нужную общую папку, которая затем будет отображаться как Shared.
По умолчанию Windows разрешено использовать 2 ядра CPU и 4 ГБ ОЗУ.
Если вы хотите изменить это, укажите нужный объём с помощью следующих переменных окружения:
environment:
RAM_SIZE: "8G"
CPU_CORES: "4"
По умолчанию создаётся пользователь Docker с паролем admin.
Если вы хотите задать другие учётные данные при установке, вы можете настроить их в compose-файле:
environment:
USERNAME: "bill"
PASSWORD: "gates"
По умолчанию будет загружена английская версия Windows.
Но вы можете добавить переменную окружения LANGUAGE в свой compose-файл, чтобы указать альтернативный язык для загрузки:
environment:
LANGUAGE: "French"
Вы можете выбрать между: 🇦🇪 арабский, 🇧🇬 болгарский, 🇨🇳 китайский, 🇭🇷 хорватский, 🇨🇿 чешский, 🇩🇰 датский, 🇳🇱 нидерландский, 🇬🇧 английский, 🇪🇪 эстонский, 🇫🇮 финский, 🇫🇷 французский, 🇩🇪 немецкий, 🇬🇷 греческий, 🇮🇱 иврит, 🇭🇺 венгерский, 🇮🇹 итальянский, 🇯🇵 японский, 🇰🇷 корейский, 🇱🇻 латышский, 🇱🇹 литовский, 🇳🇴 норвежский, 🇵🇱 польский, 🇵🇹 португальский, 🇷🇴 румынский, 🇷🇺 русский, 🇷🇸 сербский, 🇸🇰 словацкий, 🇸🇮 словенский, 🇪🇸 испанский, 🇸🇪 шведский, 🇹🇭 тайский, 🇹🇷 турецкий и 🇺🇦 украинский.
Если вы хотите настроить раскладку клавиатуры или языковой стандарт (locale), отличные от используемых по умолчанию для выбранного языка, вы можете добавить переменные KEYBOARD и REGION следующим образом:
environment:
REGION: "en-US"
KEYBOARD: "en-US"
Чтобы загрузить неподдерживаемый ISO-образ, укажите его URL в переменной окружения VERSION:
environment:
VERSION: "https://example.com/win.iso"
Кроме того, вы можете пропустить загрузку и использовать локальный файл, примонтировав его в compose-файле следующим образом:
volumes:
- ./example.iso:/custom.iso
Замените пример пути ./example.iso на имя нужного ISO-файла. В этом случае значение VERSION будет проигнорировано.
Чтобы выполнить собственный скрипт после установки, создайте файл с именем install.bat и поместите его в папку вместе с любыми дополнительными файлами, которые ему нужны (например, устанавливаемым ПО).
Затем примонтируйте эту папку в compose-файле следующим образом:
volumes:
- ./example:/oem
Пример папки ./example будет скопирован в C:\OEM, а файл install.bat внутри этой папки будет выполнен на последнем шаге автоматической установки.
Рекомендуется придерживаться автоматической установки, поскольку она настраивает различные параметры для предотвращения типичных проблем при запуске Windows в виртуальной среде.
Однако если вы настаиваете на ручной установке (на свой страх и риск), добавьте следующую переменную окружения в compose-файл:
environment:
MANUAL: "Y"
Веб-просмотрщик предназначен в основном для использования во время установки, поскольку он менее отзывчив, чем RDP, и не поддерживает такие функции, как общий буфер обмена.
Поэтому для более удобной работы вы можете подключиться через любой клиент Microsoft Remote Desktop к IP-адресу контейнера, используя имя пользователя Docker и пароль admin.
В Play Store доступен RDP-клиент для Android, а в Apple Store — для iOS. Для Linux вы можете использовать FreeRDP, а в Windows просто введите mstsc в поле поиска.
Звук по умолчанию отключён, если только вы не используете RDP. Чтобы передавать его в браузер, добавьте следующую переменную окружения:
environment:
AUDIO: "Y"
Затем включите Audio в разделе Settings → Advanced в веб-просмотрщике. Поток активен только пока эта опция включена, поэтому в остальное время он не расходует дополнительный трафик.
По умолчанию контейнер использует bridge-сеть, которая разделяет IP-адрес с хостом.
Если вы хотите назначить контейнеру отдельный IP-адрес, вы можете создать сеть macvlan следующим образом:
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
Обязательно измените эти значения в соответствии с вашей локальной подсетью.
После создания сети измените compose-файл следующим образом:
services:
windows:
container_name: windows
..<snip>..
networks:
vlan:
ipv4_address: 192.168.0.100
networks:
vlan:
external: true
Дополнительное преимущество этого подхода в том, что вам больше не нужно выполнять проброс портов, так как по умолчанию все порты будут открыты.
[!IMPORTANT]
Этот IP-адрес не будет доступен с Docker-хоста из-за особенностей macvlan, который не допускает взаимодействия между ними. Если это важно, вам нужно создать второй macvlan как обходной путь.
После настройки контейнера для macvlan Windows может стать частью вашей домашней сети, запросив IP-адрес у роутера, как обычный ПК.
Чтобы включить этот режим, в котором контейнер и Windows будут иметь отдельные IP-адреса, добавьте в compose-файл следующие строки:
environment:
DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
- 'c *:* rwm'
Чтобы создать дополнительные диски, измените compose-файл следующим образом:
environment:
DISK2_SIZE: "32G"
DISK3_SIZE: "64G"
volumes:
- ./example2:/storage2
- ./example3:/storage3
Вы можете пробросить дисковые устройства или разделы напрямую, добавив их в compose-файл следующим образом:
devices:
- /dev/sdb:/disk1
- /dev/sdc1:/disk2
Используйте /disk1, если хотите, чтобы он стал основным диском (он будет отформатирован при установке), а /disk2 и выше — чтобы добавить их в качестве дополнительных дисков (они останутся нетронутыми).
Чтобы пробросить USB-устройство, сначала узнайте его идентификаторы vendor и product с помощью команды lsusb, затем добавьте их в compose-файл следующим образом:
environment:
ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
- /dev/bus/usb
[!WARNING]
Добавление USB-устройства массового хранения до завершения установки Windows может привести к её сбою. Или того хуже: диск может быть отформатирован как системный, и все ваши данные будут потеряны! Поэтому при первом запуске контейнера всегда держите их отключёнными.
Нет. Полный обзор всех поддерживаемых параметров см. на странице переменных окружения.
Сначала убедитесь, что ваша платформа и среда выполнения контейнеров соответствуют требованиям, перечисленным выше.
На Linux-хосте установите cpu-checker и выполните:
sudo apt install cpu-checker
sudo kvm-ok
При корректной конфигурации будет выведено:
KVM acceleration can be used
Вы также можете проверить, что устройство KVM существует:
ls -l /dev/kvm
Если KVM недоступен, проверьте, что:
Intel VT-x или AMD-V) включена в вашем BIOS или UEFI.Если kvm-ok выполняется успешно, но контейнер по-прежнему сообщает, что KVM недоступен, вы можете временно добавить privileged: true в ваш Compose-файл, чтобы исключить проблему с правами доступа или доступом к устройству.
Для этого вы можете использовать dockur/macos. Он поддерживает многие из тех же функций, кроме автоматической установки.
В этом случае вы можете использовать qemus/qemu.
Да, этот проект содержит только open-source код и не распространяет саму Windows. Любые ключи продукта, найденные в коде, являются универсальными установочными ключами, опубликованными Microsoft в ознакомительных целях, и не являются действующими лицензиями для активации.
Вы несёте ответственность за наличие действительной лицензии Windows и за то, чтобы ваше использование соответствовало условиям лицензирования Microsoft.
Названия продуктов, логотипы, бренды и другие товарные знаки, упомянутые в этом проекте, являются собственностью их соответствующих владельцев. Этот проект не связан с Microsoft Corporation, не спонсируется и не поддерживается ею.
| Значение | Версия | Размер |
|---|
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 |