Die Aufgabe war einfach: Docker auf meinem Windows-Laptop zu installieren, der bereits ein Sammelsurium an Software hatte. Ich installierte Docker Desktop, erstellte Container, alles lief gut, aber ich stellte schnell fest, dass VMware Workstation keine virtuellen Maschinen mehr startete und eine Fehlermeldung anzeigte.
VMware Workstation und Device/Credential Guard sind nicht kompatibel. VMware Workstation kann nach Deaktivierung von Device/Credential Guard ausgeführt werden.
Die Arbeit stand still, ich musste dringend das Problem beheben.

Durch Googeln stellte ich fest, dass dieser Fehler aufgrund der Inkompatibilität zwischen VMware Workstation und Hyper-V auf demselben Gerät auftritt. Dieses Problem ist bekannt und VMware bietet offizielle Lösungen an, wie man es , mit einem Verweis auf die Microsoft-Wissensdatenbank . Die Lösung besteht darin, den Defender Credential Guard zu deaktivieren (Punkt 4 im Abschnitt Deaktivieren von Windows Defender Credential Guard hat mir geholfen):
mountvol X: /s
copy %WINDIR%System32SecConfig.efi X:EFIMicrosoftBootSecConfig.efi /Y
bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d "DebugTool" /application osloader
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path "EFIMicrosoftBootSecConfig.efi"
bcdedit /set {bootmgr} bootsequence {0cb3b571-2f2e-4343-a879-d86a476d7215}
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} loadoptions DISABLE-LSA-ISO
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} device partition=X:
mountvol X: /dNach dem Neustart fragt Windows, ob Defender Credential Guard wirklich deaktiviert werden soll. Ja! So wird VMWare Workstation wieder normal funktionieren, und wir sind an dem gleichen Punkt wie vor der Docker-Installation.
Ich habe keine Lösungen gefunden, um Hyper-V und VMWare Workstation miteinander zu verknüpfen, aber ich hoffe, dass sie in zukünftigen Versionen besser zusammenarbeiten.
Ein anderer Weg
Ich benutze schon seit längerer Zeit VMWare Workstation für verschiedene Zwecke und habe versucht, auf Hyper-V und VirtualBox umzusteigen, aber die Funktionalität hat meinen Anforderungen nicht entsprochen, weshalb ich bis heute dabei geblieben bin. Es hat sich herausgestellt, dass es eine Lösung gibt, um VMWare, Docker und VSCode in einer Arbeitsumgebung zu kombinieren.
— ermöglicht das Ausführen der Docker Engine auf einem virtuellen Host und das Verbinden mit diesem sowohl lokal als auch remote. Dafür gibt es einen Kompatibilitätsdriver für VMWare Workstation.
Ich werde die Installationsanleitung nicht detailliert wiederholen, hier nur die Liste der benötigten Komponenten:
- ( im Paket)
- Docker Desktop
Ja, Docker Desktop wird leider ebenfalls benötigt. Falls Sie es deinstalliert haben, installieren Sie es erneut, diesmal jedoch ohne das Kontrollkästchen für Änderungen am Betriebssystem, damit VMWare Workstation nicht erneut beschädigt wird.
Ich möchte gleich erwähnen, dass alles hervorragend für den normalen Benutzer funktioniert. Die Installationsprogramme werden um eine Erhöhung der Berechtigungen bitten, wenn es notwendig ist, aber alle Befehle in der Eingabeaufforderung und Skripte werden mit den aktuellen Benutzerrechten ausgeführt.
Das Resultat wird durch den Befehl:
$ docker-machine create --driver=vmwareworkstation deveine VM namens dev in Boot2Docker erstellt, in der Docker läuft.
Diese virtuelle Maschine kann im grafischen Interface von VMWare Workstation angebunden werden, indem die entsprechende vmx-Datei geöffnet wird. Das ist jedoch nicht unbedingt erforderlich, da VSCode nun mit einem PowerShell-Skript gestartet werden muss (aus irgendeinem Grund befanden sich docker-machine und docker-machine-driver-vmwareworkstation in meinem bin-Ordner):
cd ~/bin
. ./docker-machine env dev | Invoke-Expression
codeVSCode wird geöffnet, um lokal mit Code zu arbeiten und Docker in der virtuellen Maschine zu verwenden. Das Plugin ermöglicht eine einfache Verwaltung von Containern in der virtuellen Maschine, ohne die Konsole aufrufen zu müssen.
Herausforderungen:
Während der Erstellung der docker-machine ist der Prozess bei mir hängen geblieben:
Warten auf SSH, um verfügbar zu sein... 
Und nach einer gewissen Zeit endete es mit einer Überschreitung der Versuche, eine Verbindung zur virtuellen Maschine herzustellen.
Es dreht sich alles um die Zertifikatspolitik. Wenn Sie eine virtuelle Maschine erstellen, wird ein Verzeichnis ~.dockermachinemachinesdev angelegt, in dem sich die Zertifikatsdateien für die SSH-Verbindung befinden: id_rsa, id_rsa.pub. OpenSSH könnte sich weigern, diese zu verwenden, da es denkt, dass es ein Problem mit den Zugriffsrechten gibt. Docker-Maschine wird Ihnen darüber jedoch nichts mitteilen und einfach die Verbindung so lange wiederherstellen, bis es frustriert.
Die Lösung: Sobald die Erstellung einer neuen virtuellen Maschine beginnt, navigieren Sie zum Verzeichnis ~.dockermachinemachinesdev und ändern die Berechtigungen für die angegebenen Dateien, eine nach der anderen.
Der Eigentümer der Datei sollte der aktuelle Benutzer sein, vollständiger Zugriff nur für den aktuellen Benutzer und SYSTEM, alle anderen Benutzer, einschließlich der Administratorgruppe und der Administratoren selbst, sollten entfernt werden.
Es kann auch Probleme mit der Umwandlung absoluter Pfade aus dem Windows-Format in Posix geben sowie mit der Bindung von Volumes, die symbolische Links enthalten. Aber das ist eine andere Geschichte.
Quelle: habr.com
