From 7a2d61bed78c5303bae847352dc6cfc32634d646 Mon Sep 17 00:00:00 2001 From: misomosi Date: Thu, 3 Sep 2026 10:37:31 -0400 Subject: [PATCH] Add scripts for using Docker on Windows Home --- Win11HomeScripts/ContainersHome.bat | 6 ++++++ Win11HomeScripts/DockerDesktopHome.ps1 | 28 ++++++++++++++++++++++++++ Win11HomeScripts/HyperVHome.bat | 6 ++++++ 3 files changed, 40 insertions(+) create mode 100644 Win11HomeScripts/ContainersHome.bat create mode 100644 Win11HomeScripts/DockerDesktopHome.ps1 create mode 100644 Win11HomeScripts/HyperVHome.bat diff --git a/Win11HomeScripts/ContainersHome.bat b/Win11HomeScripts/ContainersHome.bat new file mode 100644 index 0000000..1c9c5f1 --- /dev/null +++ b/Win11HomeScripts/ContainersHome.bat @@ -0,0 +1,6 @@ +pushd "%~dp0" +dir /b %SystemRoot%\servicing\Packages\*-Containers-*.mum >ListContainersPackages.mum +for /f %%i in ('findstr /i . ListContainersPackages.mum 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i" +del ListContainersPackages.mum +Dism /online /enable-feature /featurename:Containers -All /LimitAccess /ALL +pause diff --git a/Win11HomeScripts/DockerDesktopHome.ps1 b/Win11HomeScripts/DockerDesktopHome.ps1 new file mode 100644 index 0000000..43d97ff --- /dev/null +++ b/Win11HomeScripts/DockerDesktopHome.ps1 @@ -0,0 +1,28 @@ +# To run Docker Desktop on Home with the Windows engine, +# it needs to detect that Windows is a supported edition, +# so temporarily change EditionID to Professional and +# restore it back afterwards + +# Must run this whole block with elevated privileges +$keyname = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion' +$valuename = 'EditionID' + +# Save current value of EditionID to restore later +$prev = (Get-ItemProperty -Path $keyname -Name $valuename).$valuename +Set-ItemProperty -Path $keyname -Name $valuename -Value 'Professional' +try { + # Launch Docker Desktop NON-elevated via a throwaway scheduled task + $action = New-ScheduledTaskAction -Execute 'C:\Program Files\Docker\Docker\Docker Desktop.exe' + $principal = New-ScheduledTaskPrincipal -UserId "$env:USERNAME" -LogonType Interactive -RunLevel Limited + $task = New-ScheduledTask -Action $action -Principal $principal + + Register-ScheduledTask -TaskName "TempStartDockerDesktop" -InputObject $task | Out-Null + Start-ScheduledTask -TaskName "TempStartDockerDesktop" + Write-Output "Starting Docker Desktop! Attempting to set the docker engine to windows" + docker desktop engine use windows + Unregister-ScheduledTask -TaskName "TempStartDockerDesktop" -Confirm:$false +} +finally { + # Restore EditionID + Set-ItemProperty -Type ExpandString -Path $keyname -Name $valuename -Value $prev +} diff --git a/Win11HomeScripts/HyperVHome.bat b/Win11HomeScripts/HyperVHome.bat new file mode 100644 index 0000000..862ca6a --- /dev/null +++ b/Win11HomeScripts/HyperVHome.bat @@ -0,0 +1,6 @@ +pushd "%~dp0" +dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >ListHyperVPackages.txt.txt +for /f %%i in ('findstr /i . ListHyperVPackages.txt.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i" +del containers-home.txt +Dism /online /enable-feature /featurename:Microsoft-Hyper-V -All /LimitAccess /ALL +pause -- 2.49.1