The reason why Docker needs Windows Pro or Enterprise is that they are using Hyper-V and Containers. Let’s install these.
"Windows Home Docker Desktop requires Windows 10 Pro or Enterprise version 15063 to run." So says the Docker Installer however, the Docker forums beg to differ
The workaround is to manually image the Hyper-V and Containers features, then trick the installer into thinking you're using Windows Pro.
TL;DR
- clone this gist somewhere locally
git clone https://gist.github.com/4191def376c9fecae78815454bfe661c.git windows_home_docker
- Run
windows_home_containers.ps1
in an Administrative Powershell
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@echo off | |
echo Checking for permissions | |
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system" | |
echo Permission check result: %errorlevel% | |
REM --> If error flag set, we do not have admin. | |
if '%errorlevel%' NEQ '0' ( | |
echo Requesting administrative privileges... |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
namespace ConsoleApplication | |
{ | |
using System; | |
class Program | |
{ | |
/// <param name="args"></param> | |
static void Main(string[] args) | |
{ | |
bool isoverlap; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Options : DynamicObject | |
{ | |
readonly IDictionary<string, object> inner = new ExpandoObject(); | |
public override bool TryGetMember(GetMemberBinder binder, out object result) | |
{ | |
if (!inner.TryGetValue(binder.Name, out result)) | |
result = false; | |
else | |
result = result != null ? new OptionValue(result.ToString()) : (dynamic)true; |