De taak was eenvoudig, Docker te installeren op mijn werk-laptop met Windows, waarop al een zooitje draaide. Ik installeerde Docker Desktop, maakte containers aan, alles was goed, totdat ik snel ontdekte dat VMWare Workstation stopte met het starten van virtuele machines met de fout:
VMware Workstation en Device/Credential Guard zijn niet compatibel. VMware Workstation kan worden uitgevoerd nadat Device/Credential Guard is uitgeschakeld.
Het werk ligt stil, ik moet het snel repareren.

Door te googelen ontdekte ik dat deze fout ontstaat door de incompatibiliteit van VMWare Workstation en Hyper-V op dezelfde machine. Dit probleem is bekend en er is een officiƫle oplossing van VMWare. , met een link naar de Microsoft Knowledge Base. De oplossing bestaat uit het uitschakelen van Defender Credential Guard (punt 4 in de sectie Disable Windows Defender Credential Guard hielp mij):
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: /dNa het herstarten zal Windows vragen of je Defender Credential Guard echt wilt uitschakelen. Ja! Op deze manier zal VMWare Workstation weer normaal functioneren, en zijn we weer op dezelfde plek als voor de installatie van Docker.
Ik heb geen oplossingen gevonden om Hyper-V en VMWare Workstation te verzoenen, hopelijk zullen ze in nieuwe versies compatibel zijn.
Een andere route.
Ik ben al een tijd verslaafd aan VMWare Workstation voor verschillende doeleinden, ik heb geprobeerd over te stappen naar Hyper-V en VirtualBox, maar de functionaliteit voldeed niet aan mijn behoeften, dus zit ik nog steeds bij VMWare. Het bleek dat er een oplossing is om VMWare, Docker en VSCode in ƩƩn werkomgeving te laten samenwerken.
maakt het mogelijk om Docker Engine op een virtuele host te draaien en het zowel op afstand als lokaal te benaderen. En er is een compatibiliteitsdriver voor VMWare Workstation.
Ik zal de installatie-instructies niet uitgebreid herhalen, alleen een lijst met ingrediƫnten:
- ( inclusief)
- Docker Desktop
Ja, Docker Desktop is helaas ook nodig. Als je het hebt verwijderd, installeer het dan opnieuw, maar dit keer zonder het vinkje aan te zetten voor wijzigingen in het OS, zodat VMWare Workstation niet opnieuw kapot gaat.
Ik wil meteen benadrukken dat alles prima werkt vanuit een gewone gebruiker, de installatieprogramma's zullen om escalatie van rechten vragen wanneer dat nodig is, maar alle opdrachten in de opdrachtregel en scripts worden uitgevoerd met de huidige gebruiker.
Uiteindelijk met het commando:
$ docker-machine create --driver=vmwareworkstation devEr zal een virtuele machine dev binnen Boot2Docker worden aangemaakt waarin Docker draait.
Deze virtuele machine kan worden gekoppeld in de grafische interface van VMWare Workstation door het bijbehorende vmx-bestand te openen. Maar dit is niet noodzakelijk, omdat je VSCode nu moet starten met een PowerShell-script (om de een of andere reden bevonden ik docker-machine en docker-machine-driver-vmwareworkstation in de map bin):
cd ~/bin
./docker-machine env dev | Invoke-Expression
codeVSCode opent voor het werken met code op de lokale machine en Docker in de virtuele machine. De plugin maakt het gemakkelijk om containers in de virtuele machine te beheren zonder de console te gebruiken.
Moeilijkheden:
Tijdens het aanmaken van de docker-machine bleef het proces hangen:
Wachten op SSH om beschikbaar te zijn... 
En na enige tijd eindigde het met het overschrijden van de pogingen om verbinding te maken met de virtuele machine.
Het probleem ligt in het certificaatbeleid. Bij het aanmaken van de virtuele machine krijg je een map ~.dockermachinemachinesdev en in deze map zullen de certificaatbestanden voor SSH-verbindingen staan: id_rsa, id_rsa.pub. OpenSSH kan weigeren deze te gebruiken, omdat het denkt dat er problemen zijn met de toegangsrechten. Maar docker-machine zal hier niets over zeggen, en gewoon blijven proberen tot het vervelend wordt.
Oplossing: Zodra de creatie van een nieuwe virtuele machine begint, gaan we naar de map ~.dockermachinemachinesdev en veranderen we de rechten van de opgegeven bestanden, ƩƩn voor ƩƩn.
De eigenaar van het bestand moet de huidige gebruiker zijn, volledige toegang is alleen voor de huidige gebruiker en SYSTEM, alle andere gebruikers, inclusief de groep beheerders en de beheerders zelf, moeten worden verwijderd.
Er kunnen ook problemen zijn met het omzetten van absolute paden van Windows-formaat naar Posix, en met het binden van volumes die een symbolische link bevatten. Maar dat is een ander verhaal.
Bron: habr.com
