Description
Running multiple Windows versions simultaneously requires manually managing individual compose files, ports, and resources. There's no unified tool to start, stop, monitor, or list all available Windows versions.
Proposal
A management script (winctl.sh) that provides:
- 20+ commands for container lifecycle (start/stop/restart/status/logs/shell/stats/build/rebuild/list/inspect/monitor/check/refresh/open/pull/disk/snapshot/restore/clean/destroy/instances/cache/help)
- 22 Windows versions organized by category (desktop, legacy, server, tiny)
- Interactive menus when no version is specified
- Pre-configured compose files with unique port mappings per version
- Resource profiles:
.env.modern (8G RAM, 4 CPU) and .env.legacy (2G RAM, 2 CPU)
- JSON status caching for fast repeated queries
- ARM64 auto-detection: blocks unsupported versions on ARM, shows
[x86 only] tags, configurable WINDOWS_IMAGE variable for dockurr/windows-arm
- Multi-instance support: run multiple instances of the same version with auto-allocated ports and JSON registry
- ISO cache: download and cache original ISOs to skip re-downloads on new instances (
cache download, auto-restore on --new)
- Snapshot & restore: back up and restore VM data directories
- Topic-based help:
help [commands|instances|cache|examples|config|all] with interactive numbered menu
- Auto-cache on stop:
AUTO_CACHE=Y in .env to automatically cache ISOs when stopping containers
- LAN IP detection with remote access URLs shown automatically
- Port conflict detection before starting containers
- Disk usage monitoring with per-VM and snapshot breakdowns
ARM64 Details
Only Win 10/11 variants are supported on ARM64 (win11, win11e, win11l, win10, win10e, win10l). The script detects the architecture via uname -m and:
- Blocks
start for unsupported versions with a clear error
- Tags unsupported versions in
list output
- Shows architecture info in
check and help
- Compose files use
${WINDOWS_IMAGE:-dockurr/windows} so ARM64 users set WINDOWS_IMAGE=dockurr/windows-arm
ISO Cache Details
The cache stores original (unprocessed) ISOs. When creating a new instance, the cached ISO is copied to the data directory. The container processes it locally (extract, inject drivers, answer file) without re-downloading.
cache download <version> — downloads original ISO using the container's download logic
cache save <version> — caches from data directory (skips rebuilt ISOs automatically)
- Auto-restore on
start --new — copies cached ISO before container starts
- Rebuilt ISOs (genisoimage output) are detected and skipped because they contain a duplicate boot catalog entry that 7z cannot re-extract
PR
#1637
Description
Running multiple Windows versions simultaneously requires manually managing individual compose files, ports, and resources. There's no unified tool to start, stop, monitor, or list all available Windows versions.
Proposal
A management script (
winctl.sh) that provides:.env.modern(8G RAM, 4 CPU) and.env.legacy(2G RAM, 2 CPU)[x86 only]tags, configurableWINDOWS_IMAGEvariable fordockurr/windows-armcache download, auto-restore on--new)help [commands|instances|cache|examples|config|all]with interactive numbered menuAUTO_CACHE=Yin.envto automatically cache ISOs when stopping containersARM64 Details
Only Win 10/11 variants are supported on ARM64 (win11, win11e, win11l, win10, win10e, win10l). The script detects the architecture via
uname -mand:startfor unsupported versions with a clear errorlistoutputcheckandhelp${WINDOWS_IMAGE:-dockurr/windows}so ARM64 users setWINDOWS_IMAGE=dockurr/windows-armISO Cache Details
The cache stores original (unprocessed) ISOs. When creating a new instance, the cached ISO is copied to the data directory. The container processes it locally (extract, inject drivers, answer file) without re-downloading.
cache download <version>— downloads original ISO using the container's download logiccache save <version>— caches from data directory (skips rebuilt ISOs automatically)start --new— copies cached ISO before container startsPR
#1637