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 как да се поправи, с линк към базата знания на Майкрософт. Управление на 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, 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