Docker e VMWare Workstation su una macchina Windows

Il compito era semplice, installare Docker sul mio laptop di lavoro con Windows, che già aveva un piccolo zoo di software. Ho installato Docker Desktop, creato dei contenitori, tutto ok, solo che mi sono subito reso conto che VMWare Workstation ha smesso di avviare le macchine virtuali con l'errore:

VMware Workstation e Device/Credential Guard non sono compatibili. VMware Workstation può essere eseguito dopo aver disabilitato Device/Credential Guard.

Il lavoro si è fermato, è necessario riparare subito.

Docker e VMWare Workstation su una macchina Windows

Attraverso ricerche su Google ho scoperto che questo errore si verifica a causa dell'incompatibilità tra VMWare Workstation e Hyper-V sulla stessa macchina. È un problema noto e esiste una soluzione ufficiale di VMWare per come riparare, con un collegamento alla base di conoscenze di Microsoft Gestire Windows Defender Credential Guard. La soluzione consiste nel disabilitare Defender Credential Guard (il punto 4 della sezione Disabilita Windows Defender Credential Guard mi ha aiutato):

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

Dopo il riavvio, Windows chiederà se confermare la disabilitazione di Defender Credential Guard. Sì! In questo modo VMWare Workstation tornerà a funzionare normalmente, e ci troveremo nello stesso punto di prima dell'installazione di Docker.

Non sono riuscito a trovare soluzioni su come far convivere Hyper-V e VMWare Workstation, spero che nelle nuove versioni possano lavorare insieme.

Un altro modo

Da tempo utilizzo VMWare Workstation per vari scopi, ho tentato di passare a Hyper-V e VirtualBox, ma la funzionalità non ha soddisfatto le mie esigenze, per cui sono rimasto così fino ad ora. Ho scoperto che c'è una soluzione per integrare VMWare, Docker e VSCode in un unico ambiente di lavoro.

Docker Machine — consente di eseguire Docker Engine su un host virtuale e connettersi ad esso sia da remoto che localmente. Esiste un driver di compatibilità per VMWare Workstation, collegamento a GitHub

Non approfondirò troppo la guida all'installazione, solo l'elenco degli ingredienti:

  1. Docker Toolbox (Docker Machine in dotazione)
  2. Docker Machine VMware Workstation Driver
  3. Docker Desktop

Sì, Docker Desktop, purtroppo, è necessario. Se l'avete disinstallato, reinstallatelo, ma questa volta togliete il segno di spunta per le modifiche al sistema operativo, altrimenti rischiate di rompere di nuovo VMWare Workstation.

Voglio subito notare che tutto funziona perfettamente da un semplice utente, il programma di installazione richiederà l'elevazione dei diritti quando necessario, ma tutti i comandi nella riga di comando e gli script vengono eseguiti dall'utente attuale.

Dunque, con il comando:

$ docker-machine create --driver=vmwareworkstation dev

verrà creata una virtual machine dev all'interno di Boot2Docker.

Questa virtual machine può essere collegata all'interfaccia grafica di VMWare Workstation, aprendo il file vmx corrispondente. Ma non è necessario, dato che ora sarà richiesto di avviare VSCode tramite uno script PowerShell (per qualche motivo, docker-machine e docker-machine-driver-vmwareworkstation si trovano nella cartella bin):

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

Si aprirà VSCode per lavorare con il codice sulla macchina locale e Docker nella virtual machine. Il plugin Docker for Visual Studio Code consente di gestire facilmente i container nella virtual machine senza dover accedere alla console.

Difficoltà:

Durante la creazione di docker-machine, il processo si bloccava:

Waiting for SSH to be available...

Docker e VMWare Workstation su una macchina Windows

E dopo un po’ è terminato con un superamento del numero di tentativi di connessione alla virtual machine.

Il problema riguarda la politica sui certificati. Quando si crea una virtual machine, apparirà una directory ~/.dockermachinemachinesdev in cui si trovano i file del certificato per la connessione via SSH: id_rsa, id_rsa.pub. OpenSSH può rifiutarsi di usarli, poiché considera che ci siano problemi con i diritti di accesso. Solo che docker-machine non ve ne dirà nulla, semplicemente tenterà di riconnettersi finché non si stanca.

Soluzione: Non appena inizia la creazione di una nuova virtual machine, accediamo alla directory ~/.dockermachinemachinesdev e modifichiamo i permessi dei file indicati, uno per uno.

Il proprietario del file deve essere l'utente attuale, l'accesso completo deve essere solo per l'utente attuale e SYSTEM, tutti gli altri utenti, inclusa il gruppo degli amministratori e gli stessi amministratori devono essere rimossi.

Possono anche sorgere problemi con la conversione dei percorsi assoluti dal formato Windows a Posix, e con il binding dei volumi contenenti link simbolici. Ma questa è un'altra storia.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster