同一台Windows计算机上的Docker和VMWare Workstation

任务很简单,将Docker放置在装有Windows的Windows笔记本电脑上即可。交付了Docker Desktop创建的容器,一切正常,但很快就发现VMWare Workstation停止运行虚拟机并出现错误:

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


工作起来,急需解决




使用Google时,发现此错误是由于VMWare Workstation和Hyper-V在同一台计算机上不兼容而发生的。该问题是已知的,并且参考Microsoft Manage Windows Defender Credential Guard知识库提供了有关如何解决此问题的正式VMWare解决方案解决方案是禁用Defender Credential Guard(“禁用Windows Defender Credential Guard”部分的第4段对我有帮助):

mountvol X: /s
copy %WINDIR%\System32\SecConfig.efi X:\EFI\Microsoft\Boot\SecConfig.efi /Y
bcdedit /create {0cb3b571-2f2e-4343-a879-d86a476d7215} /d "DebugTool" /application osloader
bcdedit /set {0cb3b571-2f2e-4343-a879-d86a476d7215} path "\EFI\Microsoft\Boot\SecConfig.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工作站,我希望他们会在新版本中结交朋友。

另一种方式


长期以来,我出于各种目的而迷上了VMWare工作站,试图尝试使用Hyper-V和VirtualBox,但是该功能无法满足我的任务,因此我仍然坐在那里。事实证明,有一种解决方案可以将VMWare,Docker和VSCode集成在一个工作环境中。

Docker Machine-允许您在虚拟主机上运行Docker Engine,并远程和本地连接到它。对他来说,有一个与VMWare Workstation兼容的驱动程序,一个到GitHub链接,

我不会特别讲述安装说明,只介绍一些成分:

  1. Docker Toolbox包括Docker Machine
  2. Docker Machine VMware工作站驱动程序
  3. Docker桌面

是的,不幸的是,还需要Docker Desktop。如果您将其拆除,则重新安装它,但是这次删除有关对OS进行更改的复选框,以免再次破坏VMWare Workstation。

我想立即指出,简单用户的一切都可以正常工作,安装程序会在需要时要求升级权限,但是命令行上的所有命令和脚本都是从当前用户执行的。

结果,团队:
$ docker-machine create --driver=vmwareworkstation dev

从Boot2Docker将创建一个虚拟开发人员,其中将有一个Docker。

您可以通过打开相应的vmx文件将此虚拟机附加到VMWare Workstation图形界面。但这不是必需的,因为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 \ machine \ machines \ dev,其中会有用于通过SSH连接的证书文件:id_rsa,id_rsa.pub。 OpenSSH可能会拒绝使用它们,因为它认为它们存在访问权限问题。仅在这里docker-machine不会告诉您任何有关此的信息,而只会重新连接直到感到无聊为止。

解决方案:一旦开始创建新的虚拟机,就转到〜\ .docker \ machine \ machines \ dev目录,并一次更改对指定文件的权限。

文件的所有者应为当前用户,仅对当前用户和SYSTEM具有完全访问权限,所有其他用户(包括管理员组和管理员本身)都必须删除。

将绝对路径从Windows格式转换为Posix,以及包含符号链接的绑定卷也可能存在问题。但这是另一个故事。

All Articles