]> localhost Git - gists.git/commitdiff
Add scripts for using Docker on Windows Home
authormisomosi <[email protected]>
Thu, 3 Sep 2026 14:37:31 +0000 (10:37 -0400)
committermisomosi <[email protected]>
Thu, 3 Sep 2026 14:37:31 +0000 (10:37 -0400)
Win11HomeScripts/ContainersHome.bat [new file with mode: 0644]
Win11HomeScripts/DockerDesktopHome.ps1 [new file with mode: 0644]
Win11HomeScripts/HyperVHome.bat [new file with mode: 0644]

diff --git a/Win11HomeScripts/ContainersHome.bat b/Win11HomeScripts/ContainersHome.bat
new file mode 100644 (file)
index 0000000..1c9c5f1
--- /dev/null
@@ -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 (file)
index 0000000..43d97ff
--- /dev/null
@@ -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 (file)
index 0000000..862ca6a
--- /dev/null
@@ -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