
KVM त्वरण, स्वचालित इंस्टॉलेशन और अनुकूलन योग्य संसाधनों के साथ Docker कंटेनर के अंदर Windows चलाएँ। कई Windows संस्करणों, USB passthrough और macvlan नेटवर्किंग का समर्थन करता है।
<h1 align="center">विंडोज़<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>
विंडोज़ एक डॉकर कंटेनर के अंदर।
## विशेषताएँ ✨
- डॉकर कंटेनर के अंदर विंडोज़ चलाता है
- स्वचालित डाउनलोड और बिना हस्तक्षेप के इंस्टॉलेशन
- आधुनिक और पुराने विंडोज़ संस्करणों का समर्थन करता है
- KVM त्वरण के साथ लगभग नेटिव प्रदर्शन
- अनुकूलन योग्य CPU, मेमोरी और स्टोरेज आवंटन
- मेमोरी बैलूनिंग के साथ गतिशील मेमोरी आवंटन
- USB पासथ्रू और होस्ट फोल्डर साझाकरण
- NAT, यूज़र-मोड, macvlan और macvtap नेटवर्किंग का समर्थन करता है
## वीडियो 📺
[](https://www.youtube.com/watch?v=xhGYobuG508)
## उपयोग 🐳
##### डॉकर कंपोज़:
```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
```
##### डॉकर 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
```
##### कुबरनेट्स:
```shell
kubectl apply -f https://raw.githubusercontent.com/dockur/windows/refs/heads/master/kubernetes.yml
```
##### GitHub Codespaces:
[](https://codespaces.new/dockur/windows)
##### ग्राफिकल इंस्टॉलर:
[](https://winboat.app)
## आवश्यकताएँ ⚙️
- KVM समर्थन वाले Linux होस्ट पर Docker या Podman।
- नेस्टेड वर्चुअलाइज़ेशन सक्षम के साथ Windows 11 पर Docker Desktop या Podman (Desktop)।
- कम से कम 4 GB उपलब्ध RAM।
- कम से कम 64 GB खाली डिस्क स्थान।
> [!NOTE]
> Linux, macOS और Windows 10 पर Docker Desktop वर्तमान में कंटेनरों को KVM एक्सेस प्रदान नहीं करता है, इसलिए इसका समर्थन नहीं किया जाता है।
## अक्सर पूछे जाने वाले प्रश्न 💬
### मैं इसका उपयोग कैसे करूँ?
बहुत सरल! ये चरण हैं:
- कंटेनर शुरू करें और अपने वेब ब्राउज़र का उपयोग करके [पोर्ट 8006](http://127.0.0.1:8006/) से कनेक्ट करें।
- आराम से बैठें और जादू होते देखें, पूरी इंस्टॉलेशन पूरी तरह से स्वचालित रूप से की जाएगी।
- जैसे ही आप डेस्कटॉप देखेंगे, आपका विंडोज़ इंस्टॉलेशन उपयोग के लिए तैयार है।
अपनी नई मशीन का आनंद लें, और इस रेपो को स्टार करना न भूलें!
### मैं विंडोज़ संस्करण कैसे चुनूँ?
डिफ़ॉल्ट रूप से, Windows 11 Pro इंस्टॉल किया जाएगा। लेकिन आप डाउनलोड किए जाने वाले वैकल्पिक विंडोज़ संस्करण को निर्दिष्ट करने के लिए अपनी कंपोज़ फ़ाइल में `VERSION` पर्यावरण चर जोड़ सकते हैं:
```yaml
environment:
VERSION: "10"
```
नीचे दिए गए मानों में से चुनें:
| **मान** | **संस्करण** | **आकार** |
|---|---|---|
| `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]
> विंडोज़ के ARM64 संस्करणों को इंस्टॉल करने के लिए [dockur/windows-arm](https://github.com/dockur/windows-arm/) का उपयोग करें।
### मैं स्टोरेज स्थान कैसे बदलूँ?
स्टोरेज स्थान बदलने के लिए, अपनी कंपोज़ फ़ाइल में निम्नलिखित बाइंड माउंट शामिल करें:
```yaml
volumes:
- ./windows:/storage
```
उदाहरण पथ `./windows` को अपने इच्छित स्टोरेज फ़ोल्डर या नामित वॉल्यूम से बदलें।
### मैं डिस्क का आकार कैसे बदलूँ?
64 GB के डिफ़ॉल्ट आकार को बढ़ाने के लिए, अपनी कंपोज़ फ़ाइल में `DISK_SIZE` सेटिंग जोड़ें और इसे अपनी पसंदीदा क्षमता पर सेट करें:
```yaml
environment:
DISK_SIZE: "256G"
```
> [!TIP]
> इसका उपयोग किसी मौजूदा डिस्क को बिना किसी डेटा हानि के बड़ी क्षमता में आकार बदलने के लिए भी किया जा सकता है। हालाँकि, बाद में आपको [डिस्क विभाजन को मैन्युअल रूप से बढ़ाना](https://learn.microsoft.com/en-us/windows-server/storage/disk-management/extend-a-basic-volume?tabs=disk-management) होगा, क्योंकि जोड़ा गया डिस्क स्थान असंबद्ध के रूप में दिखाई देगा।
### मैं होस्ट के साथ फ़ाइलें कैसे साझा करूँ?
इंस्टॉलेशन के बाद आपके डेस्कटॉप पर `Shared` नामक एक फ़ोल्डर होगा, जिसका उपयोग होस्ट मशीन के साथ फ़ाइलों के आदान-प्रदान के लिए किया जा सकता है।
इस उद्देश्य के लिए होस्ट पर एक फ़ोल्डर चुनने हेतु, अपनी कंपोज़ फ़ाइल में निम्नलिखित बाइंड माउंट शामिल करें:
```yaml
volumes:
- ./example:/shared
```
उदाहरण पथ `./example` को अपने इच्छित साझा फ़ोल्डर से बदलें, जो तब `Shared` के रूप में दिखाई देगा।
### मैं CPU या RAM की मात्रा कैसे बदलूँ?
डिफ़ॉल्ट रूप से, विंडोज़ को 2 CPU कोर और 4 GB RAM उपयोग करने की अनुमति होगी।
यदि आप इसे समायोजित करना चाहते हैं, तो आप निम्नलिखित पर्यावरण चरों का उपयोग करके वांछित मात्रा निर्दिष्ट कर सकते हैं:
```yaml
environment:
RAM_SIZE: "8G"
CPU_CORES: "4"
```
### मैं उपयोगकर्ता नाम और पासवर्ड कैसे कॉन्फ़िगर करूँ?
डिफ़ॉल्ट रूप से, `Docker` नामक एक उपयोगकर्ता बनाया जाता है और उसका पासवर्ड `admin` होता है।
यदि आप इंस्टॉलेशन के दौरान अलग क्रेडेंशियल सेट करना चाहते हैं, तो आप उन्हें अपनी कंपोज़ फ़ाइल में कॉन्फ़िगर कर सकते हैं:
```yaml
environment:
USERNAME: "bill"
PASSWORD: "gates"
```
### मैं विंडोज़ भाषा कैसे चुनूँ?
डिफ़ॉल्ट रूप से, विंडोज़ का अंग्रेज़ी संस्करण डाउनलोड किया जाएगा।
लेकिन आप डाउनलोड की जाने वाली वैकल्पिक भाषा निर्दिष्ट करने के लिए अपनी कंपोज़ फ़ाइल में `LANGUAGE` पर्यावरण चर जोड़ सकते हैं:
```yaml
environment:
LANGUAGE: "French"
```
आप इनमें से चुन सकते हैं: 🇦🇪 अरबी, 🇧🇬 बल्गेरियाई, 🇨🇳 चीनी, 🇭🇷 क्रोएशियाई, 🇨🇿 चेक, 🇩🇰 डेनिश, 🇳🇱 डच, 🇬🇧 अंग्रेज़ी, 🇪🇪 एस्टोनियाई, 🇫🇮 फ़िनिश, 🇫🇷 फ़्रेंच, 🇩🇪 जर्मन, 🇬🇷 ग्रीक, 🇮🇱 हिब्रू, 🇭🇺 हंगेरियाई, 🇮🇹 इतालवी, 🇯🇵 जापानी, 🇰🇷 कोरियाई, 🇱🇻 लातवियाई, 🇱🇹 लिथुआनियाई, 🇳🇴 नॉर्वेजियाई, 🇵🇱 पोलिश, 🇵🇹 पुर्तगाली, 🇷🇴 रोमानियाई, 🇷🇺 रूसी, 🇷🇸 सर्बियाई, 🇸🇰 स्लोवाक, 🇸🇮 स्लोवेनियाई, 🇪🇸 स्पेनिश, 🇸🇪 स्वीडिश, 🇹🇭 थाई, 🇹🇷 तुर्की और 🇺🇦 यूक्रेनी।
### मैं कीबोर्ड लेआउट कैसे चुनूँ?
यदि आप अपनी चुनी गई भाषा के लिए डिफ़ॉल्ट नहीं होने वाला कीबोर्ड लेआउट या लोकेल सेट करना चाहते हैं, तो आप `KEYBOARD` और `REGION` चर इस प्रकार जोड़ सकते हैं:
```yaml
environment:
REGION: "en-US"
KEYBOARD: "en-US"
```
### मैं एक कस्टम इमेज कैसे इंस्टॉल करूँ?
किसी असमर्थित ISO इमेज को डाउनलोड करने के लिए, उसका URL `VERSION` पर्यावरण चर में निर्दिष्ट करें:
```yaml
environment:
VERSION: "https://example.com/win.iso"
```
वैकल्पिक रूप से, आप डाउनलोड छोड़ सकते हैं और इसके बजाय एक स्थानीय फ़ाइल का उपयोग कर सकते हैं, इसे अपनी कंपोज़ फ़ाइल में इस प्रकार बाइंड करके:
```yaml
volumes:
- ./example.iso:/custom.iso
```
उदाहरण पथ `./example.iso` को अपनी इच्छित ISO फ़ाइल के फ़ाइल नाम से बदलें। इस स्थिति में `VERSION` का मान अनदेखा कर दिया जाएगा।
### मैं इंस्टॉलेशन के बाद एक स्क्रिप्ट कैसे चलाऊँ?
इंस्टॉलेशन के बाद अपनी स्क्रिप्ट चलाने के लिए, आप `install.bat` नामक एक फ़ाइल बना सकते हैं और इसे उन सभी अतिरिक्त फ़ाइलों के साथ एक फ़ोल्डर में रख सकते हैं जिनकी इसे आवश्यकता है (उदाहरण के लिए इंस्टॉल किया जाने वाला सॉफ़्टवेयर)।
फिर उस फ़ोल्डर को अपनी कंपोज़ फ़ाइल में इस प्रकार बाइंड करें:
```yaml
volumes:
- ./example:/oem
```
उदाहरण फ़ोल्डर `./example` को `C:\OEM` में कॉपी किया जाएगा और उस फ़ोल्डर के अंदर की `install.bat` फ़ाइल स्वचालित इंस्टॉलेशन के अंतिम चरण के दौरान निष्पादित की जाएगी।
### मैं मैन्युअल इंस्टॉलेशन कैसे करूँ?
स्वचालित इंस्टॉलेशन पर ही बने रहने की सलाह दी जाती है, क्योंकि यह वर्चुअल वातावरण में विंडोज़ चलाते समय सामान्य समस्याओं को रोकने के लिए विभिन्न सेटिंग्स समायोजित करता है।
हालाँकि, यदि आप मैन्युअल रूप से इंस्टॉलेशन करने पर ज़ोर देते हैं (अपने जोखिम पर), तो अपनी कंपोज़ फ़ाइल में निम्नलिखित पर्यावरण चर जोड़ें:
```yaml
environment:
MANUAL: "Y"
```
### मैं RDP का उपयोग करके कैसे कनेक्ट करूँ?
वेब व्यूअर मुख्य रूप से इंस्टॉलेशन के दौरान उपयोग के लिए है, क्योंकि यह RDP की तुलना में कम प्रतिक्रियाशील है और क्लिपबोर्ड साझाकरण जैसी सुविधाओं का समर्थन नहीं करता है।
इसलिए बेहतर अनुभव के लिए आप किसी भी Microsoft Remote Desktop क्लाइंट का उपयोग करके कंटेनर के IP से कनेक्ट कर सकते हैं, उपयोगकर्ता नाम `Docker` और पासवर्ड `admin` का उपयोग करके।
[Android](https://play.google.com/store/apps/details?id=com.microsoft.rdc.androidx) के लिए Play Store से उपलब्ध एक RDP क्लाइंट है और [iOS](https://apps.apple.com/nl/app/microsoft-remote-desktop/id714464092?l=en-GB) के लिए Apple Store में एक है। Linux के लिए आप [FreeRDP](https://www.freerdp.com/) का उपयोग कर सकते हैं और Windows पर सर्च बॉक्स में बस `mstsc` टाइप करें।
### मैं ऑडियो कैसे सक्षम करूँ?
ऑडियो डिफ़ॉल्ट रूप से अक्षम है जब तक कि आप RDP का उपयोग नहीं कर रहे हैं। इसे ब्राउज़र में स्ट्रीम करने के लिए, निम्नलिखित पर्यावरण चर जोड़ें:
```yaml
environment:
AUDIO: "Y"
```
फिर वेब व्यूअर में **Settings → Advanced** के अंतर्गत **Audio** सक्षम करें। यह स्ट्रीम केवल तब सक्रिय रहती है जब यह विकल्प सक्षम होता है, इसलिए अन्यथा यह अतिरिक्त बैंडविड्थ का उपयोग नहीं करता है।
### मैं कंटेनर को एक अलग IP पता कैसे प्रदान करूँ?
डिफ़ॉल्ट रूप से, कंटेनर ब्रिज नेटवर्किंग का उपयोग करता है, जो होस्ट के साथ IP पता साझा करता है।
यदि आप कंटेनर को एक अलग IP पता प्रदान करना चाहते हैं, तो आप macvlan नेटवर्क इस प्रकार बना सकते हैं:
```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
```
इन मानों को अपने स्थानीय सबनेट से मेल खाने के लिए संशोधित करना सुनिश्चित करें।
नेटवर्क बनाने के बाद, अपनी कंपोज़ फ़ाइल को इस प्रकार बदलें:
```yaml
services:
windows:
container_name: windows
..<snip>..
networks:
vlan:
ipv4_address: 192.168.0.100
networks:
vlan:
external: true
```
इस दृष्टिकोण का एक अतिरिक्त लाभ यह है कि आपको अब कोई पोर्ट मैपिंग करने की आवश्यकता नहीं होगी, क्योंकि सभी पोर्ट डिफ़ॉल्ट रूप से एक्सपोज़ हो जाएंगे।
> [!IMPORTANT]
> macvlan के डिज़ाइन के कारण यह IP पता Docker होस्ट से एक्सेस नहीं किया जा सकेगा, क्योंकि यह दोनों के बीच संचार की अनुमति नहीं देता है। यदि यह चिंता का विषय है, तो आपको एक [दूसरा macvlan](https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/#host-access) बनाने की आवश्यकता है।
### विंडोज़ मेरे राउटर से IP पता कैसे प्राप्त कर सकता है?
कंटेनर को [macvlan](#how-do-i-assign-an-individual-ip-address-to-the-container) के लिए कॉन्फ़िगर करने के बाद, विंडोज़ के लिए एक वास्तविक PC की तरह अपने राउटर से IP का अनुरोध करके आपके होम नेटवर्क का हिस्सा बनना संभव है।
इस मोड को सक्षम करने के लिए, जिसमें कंटेनर और विंडोज़ के अलग-अलग IP पते होंगे, अपनी कंपोज़ फ़ाइल में निम्नलिखित पंक्तियाँ जोड़ें:
```yaml
environment:
DHCP: "Y"
devices:
- /dev/vhost-net
device_cgroup_rules:
- 'c *:* rwm'
```
### मैं एकाधिक डिस्क कैसे जोड़ूँ?
अतिरिक्त डिस्क बनाने के लिए, अपनी कंपोज़ फ़ाइल को इस प्रकार संशोधित करें:
```yaml
environment:
DISK2_SIZE: "32G"
DISK3_SIZE: "64G"
volumes:
- ./example2:/storage2
- ./example3:/storage3
```
### मैं एक डिस्क को पास थ्रू कैसे करूँ?
आप डिस्क डिवाइस या पार्टीशन को सीधे अपनी कंपोज़ फ़ाइल में इस प्रकार जोड़कर पास थ्रू कर सकते हैं:
```yaml
devices:
- /dev/sdb:/disk1
- /dev/sdc1:/disk2
```
यदि आप चाहते हैं कि यह आपकी मुख्य ड्राइव बने (जो इंस्टॉलेशन के दौरान फ़ॉर्मेट होगी), तो `/disk1` का उपयोग करें, और उन्हें द्वितीयक ड्राइव के रूप में जोड़ने के लिए `/disk2` और उससे ऊपर का उपयोग करें (जो अछूते रहेंगे)।
### मैं एक USB डिवाइस को पास थ्रू कैसे करूँ?
USB डिवाइस को पास थ्रू करने के लिए, पहले `lsusb` कमांड के माध्यम से उसके विक्रेता और उत्पाद ID देखें, फिर उन्हें अपनी कंपोज़ फ़ाइल में इस प्रकार जोड़ें:
```yaml
environment:
ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
- /dev/bus/usb
```
> [!WARNING]
> Windows Setup समाप्त होने से पहले USB मास स्टोरेज डिवाइस जोड़ने से यह विफल हो सकता है। या इससे भी बदतर: ड्राइव को सिस्टम डिस्क के रूप में फ़ॉर्मेट किया जा सकता है, और आपका सारा डेटा खो जाएगा! इसलिए पहली बार कंटेनर लॉन्च करते समय उन्हें हमेशा डिस्कनेक्ट रखें।
### क्या ये सभी उपलब्ध विकल्प हैं?
नहीं। सभी समर्थित सेटिंग्स का पूर्ण अवलोकन देखने के लिए, [पर्यावरण चर](https://github.com/dockur/windows/blob/master/docs/environment.md) पृष्ठ देखें।
### मैं कैसे सत्यापित करूँ कि KVM उपलब्ध है?
सबसे पहले, सुनिश्चित करें कि आपका प्लेटफ़ॉर्म और कंटेनर रनटाइम ऊपर सूचीबद्ध [आवश्यकताओं](#requirements-️) को पूरा करते हैं।
Linux होस्ट पर, `cpu-checker` इंस्टॉल करें और चलाएँ:
```bash
sudo apt install cpu-checker
sudo kvm-ok
```
एक कार्यशील कॉन्फ़िगरेशन को यह रिपोर्ट करना चाहिए:
```text
KVM acceleration can be used
```
आप यह भी सत्यापित कर सकते हैं कि KVM डिवाइस मौजूद है:
```bash
ls -l /dev/kvm
```
यदि KVM अनुपलब्ध है, तो जाँच करें कि:
- हार्डवेयर वर्चुअलाइज़ेशन (`Intel VT-x` या `AMD-V`) आपके BIOS या UEFI में सक्षम है।
- जब होस्ट स्वयं एक वर्चुअल मशीन है तो नेस्टेड वर्चुअलाइज़ेशन सक्षम है।
- आपका VPS या क्लाउड प्रदाता नेस्टेड वर्चुअलाइज़ेशन का समर्थन करता है।
यदि `kvm-ok` सफल होता है लेकिन कंटेनर अभी भी रिपोर्ट करता है कि KVM अनुपलब्ध है, तो आप अनुमति या डिवाइस-एक्सेस समस्या से इंकार करने के लिए अस्थायी रूप से अपनी Compose फ़ाइल में `privileged: true` जोड़ सकते हैं।
### मैं एक कंटेनर में macOS कैसे चलाऊँ?
इसके लिए आप [dockur/macos](https://github.com/dockur/macos) का उपयोग कर सकते हैं। यह स्वचालित इंस्टॉलेशन को छोड़कर कई समान सुविधाएँ साझा करता है।
### मैं एक कंटेनर में Linux डेस्कटॉप कैसे चलाऊँ?
उस स्थिति में आप [qemus/qemu](https://github.com/qemus/qemu) का उपयोग कर सकते हैं।
### क्या यह प्रोजेक्ट कानूनी है?
हाँ, इस प्रोजेक्ट में केवल ओपन-सोर्स कोड है और यह स्वयं विंडोज़ वितरित नहीं करता है। कोड में पाए जाने वाले कोई भी उत्पाद कुंजियाँ Microsoft द्वारा परीक्षण उद्देश्यों के लिए प्रकाशित सामान्य इंस्टॉलेशन कुंजियाँ हैं और वैध सक्रियण लाइसेंस नहीं हैं।
आप यह सुनिश्चित करने के लिए ज़िम्मेदार हैं कि आपके पास वैध विंडोज़ लाइसेंस है और आपका उपयोग Microsoft की लाइसेंसिंग शर्तों का अनुपालन करता है।
## स्टार्स 🌟
[](https://github.com/dockur/windows/stargazers)
## अस्वीकरण ⚖️
*इस प्रोजेक्ट में संदर्भित उत्पाद नाम, लोगो, ब्रांड और अन्य ट्रेडमार्क उनके संबंधित ट्रेडमार्क धारकों की संपत्ति हैं। यह प्रोजेक्ट 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