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 机器上

通过google发现出现这个错误是由于同一台机器上VMWare Workstation和Hyper-V不兼容造成的。 这个问题是已知的,并且有一个像这样的官方 VMWare 解决方案 确定,带有 Microsoft 知识库的链接 管理 Windows Defender Credential Guard。 解决方案是禁用 Defender Credential Guard(禁用 Windows Defender Credential Guard 部分的第 4 项对我有帮助):

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机器 - 允许您在虚拟主机上运行 Docker 引擎并远程和本地连接到它。 并且有一个 VMWare Workstation 兼容驱动程序, 链接到github

我不会特别重述安装说明,只重述成分列表:

  1. Docker工具箱 (Docker机器 包括)
  2. Docker 机器 VMware 工作站驱动程序
  3. Docker桌面

是的,不幸的是,还需要 Docker Desktop。 如果您拆除了它,请重新安装它,但这次删除有关更改操作系统的复选框,以免再次破坏VMWare Workstation。

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

结果,团队:

$ docker-machine create --driver=vmwareworkstation dev

从 Boot2Docker 开始,将创建一个 dev virtualka,其中包含 Docker。

通过打开相应的 vmx 文件,可以将该虚拟机附加到 VMWare Workstation GUI。 但这不是必需的,因为 VSCode 现在需要运行 PowerShell 脚本(由于某种原因,我的 docker-machine 和 docker-machine-driver-vmwareworkstation 最终位于 bin 文件夹中):

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

VSCode 将打开以使用本地计算机上的代码和虚拟机中的 docker。 插入 用于 Visual Studio Code 的 Docker 让您无需进入控制台即可方便地管理虚拟机中的容器。

困难:

在创建 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

添加评论