Docker и VMWare Workstation на една Windows машина

Задачата беше проста, да инсталирам Docker на моя работна лаптоп с Windows, който вече е един зоопарк. Инсталирах Docker Desktop, създадох контейнери, всичко е наред, но бързо открих, че VMWare Workstation спря да стартира виртуални машини с грешка:

VMware Workstation и Device/Credential Guard не са съвместими. VMware Workstation може да бъде стартиран след деактивиране на Device/Credential Guard.

Работата спря, трябва спешно да се поправи.

Docker и VMWare Workstation на една Windows машина

С помощта на гуглене научих, че тази грешка възниква заради несъвместимост между VMWare Workstation и Hyper-V на една машина. Проблемът е известен и VMWare има официално решение как да го поправим, с връзка към базата данни на Microsoft. Управление на Windows Defender Credential Guard. Решението се състои в деактивиране на Defender Credential Guard (на мен ми помогна точка 4 от секцията Деактивиране на 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

След перезапуск Windows ще пита, действително ли да се деактивира Defender Credential Guard. Да! По този начин VMWare Workstation ще възвърне нормалната си работа и ще се окажем на същото място, където бяхме преди инсталацията на Docker.

Не намерих решения как да помиря Hyper-V и VMWare Workstation, надявам се в новите версии те да се събрали.

Друг начин

Отдавна съм се запалил по VMWare Workstation за различни цели, опитвах се да премина на Hyper-V и VirtualBox, но функционалността не отговори на моите нужди, така че все още използвам VMWare. Оказа се, че има решение как да свържем VMWare, Docker и VSCode в една работна среда.

Docker Machine — позволява стартиране на Docker Engine на виртуален хост и свързване с него както отдалечено, така и локално. И за него има съвместим драйвер с VMWare Workstation, връзка към GitHub

Няма да разказвам подробно инструкциите за инсталиране, само списък с необходимите неща:

  1. Docker Toolbox (Docker Machine в комплекта)
  2. Docker Machine VMware Workstation Driver
  3. Docker Desktop

Да, Docker Desktop, за съжаление, също ще е необходим. Ако сте го деинсталирали, инсталирайте го отново, но този път махнете отметката за промените в ОС, за да не счупите отново VMWare Workstation.

Искам веднага да подчертая, че всичко работи прекрасно от обикновен потребител, инсталаторите ще поискат ескалация на правата, когато е необходимо, но всички команди в командния ред и скриптите се изпълняват от текущия потребител.

В крайна сметка с командата:

$ docker-machine create --driver=vmwareworkstation dev

От Boot2Docker ще бъде създаден виртуален компютър dev, в който ще бъде Docker.

Този виртуален компютър може да бъде свързан чрез графичния интерфейс на VMWare Workstation, отваряйки съответния vmx файл. Но това не е задължително, защото сега VSCode ще трябва да стартира PowerShell скрипт (по някаква причина docker-machine и docker-machine-driver-vmwareworkstation се оказаха именно в папката bin):

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

Ще се отвори VSCode за работа с кода на локалната машина и Docker в виртуалката. Плъгинът Docker for Visual Studio Code позволява удобно управление на контейнерите във виртуалката, без да се налага да се влиза в консолата.

Трудности:

По време на създаването на docker-machine, процесът ми се блокираше:

Waiting for SSH to be available...

Docker и VMWare Workstation на една Windows машина

И след известно време приключи с изчерпване на опитите за свързване с виртуалката.

Всичко е в политиката относно сертификатите. При създаването на виртуална машина, ще се появи каталог ~/.dockermachinemachinesdev, в който ще има файлове с сертификати за SSH свързване: id_rsa, id_rsa.pub. OpenSSH може да отказва да ги използва, тъй като смята, че имат проблеми с правата за достъп. Просто docker-machine няма да ви каже нищо за това, а просто ще опитва да се свърже, докато не се откаже.

Решение: Щом започне създаването на новата виртуална машина, влизаме в каталога ~/.dockermachinemachinesdev и променяме правата на указаните файлове, един по един.

Собственик на файла трябва да бъде текущият потребител, с пълен достъп само за текущия потребител и SYSTEM, а останалите потребители, включително групата администратори и самите администратори, трябва да бъдат премахнати.

Може също да имате проблеми с преобразуването на абсолютни пътища от Windows формат в Posix, и с свързването на томове, съдържащи символни линкове. Но това вече е друга история.

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster