Docker și VMWare Workstation pe aceeași mașină Windows

Sarcina a fost simplă, să instalez Docker pe laptopul meu de lucru cu Windows, pe care deja aveam un haos. Am instalat Docker Desktop, am creat containere, totul bine, dar am descoperit rapid că VMWare Workstation a încetat să mai pornească mașinile virtuale cu o eroare:

VMware Workstation și Device/Credential Guard nu sunt compatibile. VMware Workstation poate fi rulat după dezactivarea Device/Credential Guard.

Lucrurile s-au oprit, trebuie să repar urgent.

Docker și VMWare Workstation pe aceeași mașină Windows

Prin căutare pe Google, am aflat că această eroare apare din cauza incompatibilității dintre VMWare Workstation și Hyper-V pe aceeași mașină. Problema este cunoscută și există o soluție oficială de la VMWare pe cum să o repari, cu un link către baza de cunoștințe Microsoft Gestionează Windows Defender Credential Guard. Soluția constă în dezactivarea Defender Credential Guard (m-a ajutat punctul 4 din secțiunea Dezactivatează Windows Defender Credential Guard):

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: /d

După repornirea Windows, va întreba dacă vreau cu adevărat să dezactivez Defender Credential Guard. Da! Astfel, VMWare Workstation va reveni la funcționarea normală, iar noi ne vom găsi în aceeași situație ca înainte de a instala Docker.

Soluțiile pentru a împăca Hyper-V și VMWare Workstation nu le-am găsit, sper că în versiunile viitoare se vor înțelege.

Un alt mod

De mult timp folosesc VMWare Workstation pentru diverse scopuri, am încercat să trec pe Hyper-V și VirtualBox, dar funcționalitatea nu a satisfăcut cerințele mele, așa că încă utilizez VMWare. Se pare că există o soluție pentru a alinia VMWare, Docker și VSCode într-un singur mediu de lucru.

Docker Machine — permite rularea Docker Engine pe un gazdă virtuală și conectarea la acesta atât de la distanță, cât și local. Și pentru aceasta există un driver de compatibilitate cu VMWare Workstation, link către GitHub

Nu voi relua în detaliu instrucțiunile de instalare, doar lista ingredientelor:

  1. Docker Toolbox (Docker Machine inclusă)
  2. Docker Machine VMware Workstation Driver
  3. Docker Desktop

Da, Docker Desktop, din păcate, va fi necesar. Dacă l-ați dezinstalat, atunci reinstalați-l, dar de data aceasta fără a bifa căsuța pentru modificări în sistemul de operare, pentru a nu strica din nou VMWare Workstation.

Vreau să subliniez că totul funcționează perfect de la un utilizator obișnuit, programele de instalare vor cere escaladarea privilegiilor când va fi necesar, dar toate comenzile în linia de comandă și scripturile sunt executate de utilizatorul curent.

În concluzie, comanda:

$ docker-machine create --driver=vmwareworkstation dev

O virtual machine dev va fi creată din Boot2Docker, în interiorul căreia va fi Docker.

Această mașină virtuală poate fi conectată la interfața grafică VMWare Workstation, deschizând fișierul vmx corespunzător. Însă aceasta nu este obligatorie, deoarece acum va trebui să lansăm scriptul PowerShell în VSCode (dintr-un motiv oarecare, docker-machine și docker-machine-driver-vmwareworkstation s-au aflat în folderul bin):

cd ~/bin
./docker-machine env dev | Invoke-Expression
code

Se va deschide VSCode pentru a lucra cu codul pe mașina locală și Docker în mașina virtuală. Pluginul Docker pentru Visual Studio Code permite gestionarea convenabilă a containerelor din mașina virtuală fără a accesa consola.

Dificultăți:

În timpul creării docker-machine, procesul meu s-a blocat:

Waiting for SSH to be available...

Docker și VMWare Workstation pe aceeași mașină Windows

Și după un timp s-a încheiat cu depășirea încercărilor de a stabili conexiunea cu mașina virtuală.

Totul se datorează politicii privind certificatele. La crearea mașinii virtuale, va apărea un folder ~.dockermachinemachinesdev în care vor fi fișierele certificatului pentru conexiunea SSH: id_rsa, id_rsa.pub. OpenSSH poate refuza să le folosească, considerând că au probleme cu permisiunile. Dar docker-machine nu vă va spune nimic despre asta, pur și simplu va încerca să se reconecteze până când se va sătura.

Soluția: Odată ce începe crearea noii mașini virtuale, intrăm în folderul ~.dockermachinemachinesdev și schimbăm permisiunile pe fișierele respective, pe rând.

Proprietarul fișierului trebuie să fie utilizatorul curent, iar accesul total să fie doar pentru utilizatorul curent și SYSTEM, ceilalți utilizatori, inclusiv grupul de administratori și administratorii înșiși, trebuind eliminați.

De asemenea, pot exista probleme cu transformarea căilor absolute din format Windows în format Posix și cu legarea volumelor care conțin link-uri simbolice. Dar aceasta este o altă poveste.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster