Docker та VMWare Workstation на одній Windows машині

Завдання було простим, поставити Docker на свій робочий ноутбук з Windows, на якому вже і так зоопарк. Поставив Docker Desktop створив контейнери, все ок, тільки швидко виявив, що VMWare Workstation перестала запускати віртуалки з помилкою:

VMware Workstation and Device/Credential Guard are not compatible. VMware Workstation can be run after disabling Device/Credential Guard.

Робота встала, потрібно терміново лагодити

Docker та VMWare Workstation на одній Windows машині

Методом глинення було з'ясовано, що ця помилка виникає через несумісність VMWare Workstation та Hyper-V на одній машині. Проблема відома і є офіційним рішенням VMWare як це полагодити, з посиланням на базу знань Microsoft Manage Windows Defender Credential Guard. Рішення полягає у відключенні Defender Credential Guard (мені допоміг пункт 4 розділу Disable 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 повернеться до нормальної роботи, і ми опинимося в тому ж місці, що й до встановлення докера.

Рішення як помирити Hyper-V і VMWare Workstation я так і не знайшов, сподіваюсь у нових версіях вони потоваришують.

Інший шлях

Я вже давно підсів на VMWare Workstation для різних цілей, намагався злізти на Hyper-V і VirtualBox, але функціонал не задовольнив моїм завданням, то й досі сиджу. Виявилося, є рішення як подружити VMWare, Docker і VSCode в одному робочому середовищі.

Докер машина — дозволяє запускати Docker Engine на віртуальному хості та підключатися до нього як віддалено, так і локально. І для нього є драйвер сумісності з VMWare Workstation, посилання на GitHub

Інструкцію зі встановлення особливо переказувати не буду, тільки список інгредієнтів:

  1. Docker Toolbox (Докер машина в комплекті)
  2. Docker Machine VMware Workstation Driver
  3. Робочий стіл Docker

Так, 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 для 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, і з біндингом томів містять symbolic link. Але то вже інша історія.

Джерело: habr.com

Додати коментар або відгук