From 23cc43470301475910130865a8c92f5f32471b35 Mon Sep 17 00:00:00 2001 From: Michel Abboud Date: Thu, 29 Jan 2026 00:46:11 +0000 Subject: [PATCH] feat: Add configurable restart policy, default to on-failure - Changed restart policy from unless-stopped to on-failure so Windows shutdown stops the container instead of restarting - Added RESTART_POLICY env variable to .env.modern and .env.legacy - Compose files use ${RESTART_POLICY:-on-failure} for flexibility - Updated WINCTL_GUIDE.md with restart policy documentation - Updated readme.md with RESTART_POLICY setting Co-Authored-By: Claude Opus 4.5 --- .env.example | 1 + .env.legacy | 3 +++ .env.modern | 3 +++ WINCTL_GUIDE.md | 13 +++++++++++++ compose/desktop/win10.yml | 6 +++--- compose/desktop/win11.yml | 6 +++--- compose/desktop/win7.yml | 4 ++-- compose/desktop/win8.yml | 4 ++-- compose/legacy/vista.yml | 2 +- compose/legacy/win2k.yml | 2 +- compose/legacy/winxp.yml | 2 +- compose/server/win2003.yml | 2 +- compose/server/win2008.yml | 2 +- compose/server/win2012.yml | 2 +- compose/server/win2016.yml | 2 +- compose/server/win2019.yml | 2 +- compose/server/win2022.yml | 2 +- compose/server/win2025.yml | 2 +- compose/tiny/tiny10.yml | 2 +- compose/tiny/tiny11.yml | 2 +- readme.md | 1 + 21 files changed, 43 insertions(+), 22 deletions(-) diff --git a/.env.example b/.env.example index a5b7c66..c37b0cc 100644 --- a/.env.example +++ b/.env.example @@ -21,4 +21,5 @@ # HEIGHT=720 # Display height # DHCP=N # Use DHCP (Y/N) # SAMBA=Y # Enable file sharing (Y/N) +# RESTART_POLICY=on-failure # Restart policy (no, on-failure, always, unless-stopped) # DEBUG=N # Debug mode (Y/N) diff --git a/.env.legacy b/.env.legacy index feea471..31aea64 100644 --- a/.env.legacy +++ b/.env.legacy @@ -22,5 +22,8 @@ HEIGHT=720 DHCP=N SAMBA=Y +# Restart Policy (no, on-failure, always, unless-stopped) +RESTART_POLICY=on-failure + # Debug DEBUG=N diff --git a/.env.modern b/.env.modern index 9e32268..40819d0 100644 --- a/.env.modern +++ b/.env.modern @@ -22,5 +22,8 @@ HEIGHT=720 DHCP=N SAMBA=Y +# Restart Policy (no, on-failure, always, unless-stopped) +RESTART_POLICY=on-failure + # Debug DEBUG=N diff --git a/WINCTL_GUIDE.md b/WINCTL_GUIDE.md index c812199..48d4d99 100644 --- a/WINCTL_GUIDE.md +++ b/WINCTL_GUIDE.md @@ -410,6 +410,7 @@ REGION=en-US KEYBOARD=en-US DHCP=N SAMBA=Y +RESTART_POLICY=on-failure DEBUG=N ``` @@ -429,8 +430,20 @@ DEBUG=N | `HEIGHT` | Display height | 720 | | `DHCP` | Use DHCP networking | N | | `SAMBA` | Enable file sharing | Y | +| `RESTART_POLICY` | Container restart policy | on-failure | | `DEBUG` | Debug mode | N | +### Restart Policy Options + +| Value | Description | +|-------|-------------| +| `no` | Never restart automatically | +| `on-failure` | Restart only if container exits with error (default) | +| `always` | Always restart regardless of exit status | +| `unless-stopped` | Always restart unless manually stopped | + +**Note:** With `on-failure` (default), shutting down Windows from inside will stop the container. With `unless-stopped` or `always`, the container will restart after Windows shutdown. + --- ## Interactive Menus diff --git a/compose/desktop/win10.yml b/compose/desktop/win10.yml index d2eeb56..610210f 100644 --- a/compose/desktop/win10.yml +++ b/compose/desktop/win10.yml @@ -16,7 +16,7 @@ services: - 3310:3389/udp volumes: - ../../data/win10:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m win10e: @@ -36,7 +36,7 @@ services: - 3314:3389/udp volumes: - ../../data/win10e:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m win10l: @@ -56,5 +56,5 @@ services: - 3315:3389/udp volumes: - ../../data/win10l:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/desktop/win11.yml b/compose/desktop/win11.yml index f45b6a7..065ad04 100644 --- a/compose/desktop/win11.yml +++ b/compose/desktop/win11.yml @@ -16,7 +16,7 @@ services: - 3311:3389/udp volumes: - ../../data/win11:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m win11e: @@ -36,7 +36,7 @@ services: - 3312:3389/udp volumes: - ../../data/win11e:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m win11l: @@ -56,5 +56,5 @@ services: - 3313:3389/udp volumes: - ../../data/win11l:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/desktop/win7.yml b/compose/desktop/win7.yml index a7d6a2d..091e217 100644 --- a/compose/desktop/win7.yml +++ b/compose/desktop/win7.yml @@ -16,7 +16,7 @@ services: - 3307:3389/udp volumes: - ../../data/win7:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m win7e: @@ -36,5 +36,5 @@ services: - 3371:3389/udp volumes: - ../../data/win7e:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/desktop/win8.yml b/compose/desktop/win8.yml index da69bee..8440c6b 100644 --- a/compose/desktop/win8.yml +++ b/compose/desktop/win8.yml @@ -16,7 +16,7 @@ services: - 3308:3389/udp volumes: - ../../data/win81:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m win81e: @@ -36,5 +36,5 @@ services: - 3381:3389/udp volumes: - ../../data/win81e:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/legacy/vista.yml b/compose/legacy/vista.yml index 3ac93a8..ba0ec05 100644 --- a/compose/legacy/vista.yml +++ b/compose/legacy/vista.yml @@ -16,5 +16,5 @@ services: - 3306:3389/udp volumes: - ../../data/vista:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/legacy/win2k.yml b/compose/legacy/win2k.yml index 6600ece..68db30e 100644 --- a/compose/legacy/win2k.yml +++ b/compose/legacy/win2k.yml @@ -16,5 +16,5 @@ services: - 3300:3389/udp volumes: - ../../data/win2k:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/legacy/winxp.yml b/compose/legacy/winxp.yml index 5c4e2c7..0280663 100644 --- a/compose/legacy/winxp.yml +++ b/compose/legacy/winxp.yml @@ -16,5 +16,5 @@ services: - 3305:3389/udp volumes: - ../../data/winxp:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/server/win2003.yml b/compose/server/win2003.yml index 2d9c89a..7ee1c41 100644 --- a/compose/server/win2003.yml +++ b/compose/server/win2003.yml @@ -16,5 +16,5 @@ services: - 3303:3389/udp volumes: - ../../data/win2003:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/server/win2008.yml b/compose/server/win2008.yml index 1449af7..46a73ac 100644 --- a/compose/server/win2008.yml +++ b/compose/server/win2008.yml @@ -16,5 +16,5 @@ services: - 3208:3389/udp volumes: - ../../data/win2008:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/server/win2012.yml b/compose/server/win2012.yml index e32dc9c..8a45438 100644 --- a/compose/server/win2012.yml +++ b/compose/server/win2012.yml @@ -16,5 +16,5 @@ services: - 3212:3389/udp volumes: - ../../data/win2012:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/server/win2016.yml b/compose/server/win2016.yml index 6b5850d..823f947 100644 --- a/compose/server/win2016.yml +++ b/compose/server/win2016.yml @@ -16,5 +16,5 @@ services: - 3316:3389/udp volumes: - ../../data/win2016:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/server/win2019.yml b/compose/server/win2019.yml index e43c782..4eb0439 100644 --- a/compose/server/win2019.yml +++ b/compose/server/win2019.yml @@ -16,5 +16,5 @@ services: - 3319:3389/udp volumes: - ../../data/win2019:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/server/win2022.yml b/compose/server/win2022.yml index 3576123..51c7dbe 100644 --- a/compose/server/win2022.yml +++ b/compose/server/win2022.yml @@ -16,5 +16,5 @@ services: - 3322:3389/udp volumes: - ../../data/win2022:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/server/win2025.yml b/compose/server/win2025.yml index 85ac4a9..8ede87c 100644 --- a/compose/server/win2025.yml +++ b/compose/server/win2025.yml @@ -16,5 +16,5 @@ services: - 3325:3389/udp volumes: - ../../data/win2025:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/tiny/tiny10.yml b/compose/tiny/tiny10.yml index 2a7137b..a7f03e6 100644 --- a/compose/tiny/tiny10.yml +++ b/compose/tiny/tiny10.yml @@ -16,5 +16,5 @@ services: - 3110:3389/udp volumes: - ../../data/tiny10:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/compose/tiny/tiny11.yml b/compose/tiny/tiny11.yml index ad5c022..06cc891 100644 --- a/compose/tiny/tiny11.yml +++ b/compose/tiny/tiny11.yml @@ -16,5 +16,5 @@ services: - 3111:3389/udp volumes: - ../../data/tiny11:/storage - restart: unless-stopped + restart: ${RESTART_POLICY:-on-failure} stop_grace_period: 2m diff --git a/readme.md b/readme.md index 501d112..8ea61b8 100644 --- a/readme.md +++ b/readme.md @@ -136,6 +136,7 @@ DISK_SIZE=128G USERNAME=docker PASSWORD=admin LANGUAGE=en +RESTART_POLICY=on-failure # Options: no, on-failure, always, unless-stopped ``` > 📖 See [WINCTL_GUIDE.md](WINCTL_GUIDE.md) for complete documentation, usage scenarios, and troubleshooting.