Webserver kann nicht auf Port 80 starten

Falls es beim Start eines Docker Containers unter Windows zu folgendem Fehler kommt

docker.exe: Error response from daemon: driver failed programming external connectivity on endpoint […]: Error starting userland proxy: Bind for 0.0.0.0:80: unexpected error Permission denied.

könnte ein Windows-Dienst der still und heimlich im Hintergrund auf Port 80 läuft die Ursache dafür sein.

Mit dem PowerShell Befehl

Get-NetTCPConnection -LocalPort 80 | Format-List

findet man dann relativ wenig hilfreiche Informationen – außer, dass wie in meinem Fall ein Prozess mit der ID 4 den Port verwendet.

Get-Process -Id 4

Liefert als „ProcessName“ lediglich „System“.

Wenn man anschließend den PowerShell Befehl

net stop http

verwendet, listet Windows die Dienste auf, die aktuell an den Port 80 angebunden sind und im nächsten Schritt beendet werden. Bei mir waren das u.a. die Druckerwarteschlange, Windows Media Player-Netzwerkfreigabedienst, WWW-Publishingdienst, SSDP-Suche und einige weitere mehr. Die Abfrage, ob diese Dienste jetzt beendet werden sollen habe ich mit „J“ bestätigt und schon funktionierte anschließend auch der Start eines nginx auf dem lokalen Port 80.

docker run -d -p 80:80 nginx

Hyper-V unter Windows 10 aktivieren und deaktivieren

Windows 10 (und 8) Pro und Enterprise bringen das Hyper Virtualization Feature (kurz: Hyper-V) mit, was von Docker zwingend benötigt wird, um unter Windows lauffähig zu sein.

Hyper-V kann auf verschiedene Arten ein- und ausgeschaltet werden. Am einfachsten geht es per Shell-Befehl. Dafür wird eine Shell mit Administratorberechtigung benötigt.

Hyper-V aktivieren:

bcdedit /set hypervisorlaunchtype auto

– oder –

dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

Hyper-V deaktivieren:

bcdedit /set hypervisorlaunchtype off

– oder –

dism.exe /Online /Disable-Feature:Microsoft-Hyper-V /All

Anschließend sollte der PC neugestartet werden.

Eine Anmerkung zur Verwendung von Docker und VMware auf einem System. Leider ist VMware im Moment nicht mit Hyper-V kompatibel. Das führt dazu, dass man immer nur eine der beiden Virtualisierungslösungen nutzen kann, da Docker auf Hyper-V angewiesen ist.