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.

Работа встала, нужно срочно чинить

Методом гугления было выяснено, что данная ошибка возникает из-за несовместимости 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 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 for Visual Studio Code позволяет удобно управлять контейнерами в виртуалке не залезая в консоль.

Сложности:

В процессе создания docker-machine у меня процесс зависал:

Waiting for SSH to be available...

И через некоторое время завершился с превышением попыток установить соединение с виртуалкой.

Всё дело в политике к сертификатам. При создании виртуальной машины, у вас появится каталог ~.dockermachinemachinesdev в этом каталоге будут файлы сертификата для подключения по SSH: id_rsa, id_rsa.pub. OpenSSH может отказываться их использовать, так как считает что у них проблемы с правами доступа. Только вот docker-machine вам об этом ничего не скажет, а просто будет переподключаться пока не надоест.

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

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

Так же могут быть проблемы с преобразованием абсолютных путей из Windows формата в Posix, и с биндингом томов содержащих symbolic link. Но это уже другая история.

Специально для сайта ITWORLD.UZ. Новость взята с сайта Хабр