我可以在虚拟机上运行Docker吗?

59

我尝试在虚拟机上运行Docker。

Host : MacBook 
VM : Parallels Windows 7

出现错误:

输入图片描述

可能吗?


请问您能否提供更多信息,因为这就像您试图在另一个虚拟机内启动虚拟机一样。 - c4f4t0r
5
这就像电影《盗梦空间》一样。 - Rolf
6个回答

63
如果虚拟机是Linux系统,那么你可以很容易地使用Docker,因为在Linux上,Docker本质上就是一个完美运行的chroot。因此,Linux Docker不是虚拟化。
但对于Windows系统,情况就不太简单了。Windows Docker内部使用Hyper-V模拟容器。这意味着只有当你使用嵌套虚拟化时才能运行:
1. 在你的宿主机上运行一个Windows虚拟机 2. 在你的Windows虚拟机中运行HyperV 3. HyperV由安装在你的虚拟Windows中的docker来管理。
我尝试过qemu/kvm、virtualbox和vmware player等虚拟软件,并进行了深入配置和强力破解,但仅有VMWare成功了。
虽然速度会受到明显影响,但这种方式可能对在Linux上进行开发,然后在Windows上进行试验或测试的工作非常有用。
你需要大量内存,至少16GB,32GB更好。相对实用的配置应该是:
- 物理主机32GB内存 - 运行在其上的Windows虚拟机12GB虚拟内存 - 运行在Windows虚拟机内的HyperV Linux主机8GB虚拟内存
有时会出现一些小问题,但只要HyperV崩溃了,你的虚拟Win或主机机器就不会出现问题。这种方式适合在Windows机器上测试你在Linux上开发的docker容器,但不要用于重要任务的服务器。 :-)

1
@MarinosAn 在虚拟化方面没有性能成本,因为Linux Docker本质上是一个经过良好处理的chroot。在Windows上,Docker是一个超级虚拟机,运行Linux,再运行Linux Docker。 - peterh
1
不太令人信服。 - Marinos An
11
@MarinosAn 我其实不太理解,这其中应该有什么说服力。这是一个事实。 - peterh
2
@MarinosAn 这是令人信服的,因为 Windows 太差劲了 :) Windows 本身需要大量资源,如果您设法在其中运行虚拟机,您将增加成本... - Amir Hossein Baghernezad
1
@Webman,抱歉我无法真正理解你的问题,但是将其发布为问题(点击“提问”按钮)可能会获得更多帮助。 - peterh
显示剩余2条评论

30
您正在Windows虚拟机中使用Docker Machine,实际上会在Mac的Windows虚拟机内创建一个Linux虚拟机。您可以这样做,但需要启用嵌套虚拟化 - 我不确定您是否可以在Parallels 7中执行此操作。
相反,您可以直接在Mac上运行Docker Machine,并使用Parallels创建Linux虚拟机 - 这意味着Docker在Mac上运行的是Linux虚拟机,因此您不需要嵌套虚拟化。
或者最好如果您的操作系统支持,使用Docker for Mac,它是最新的产品,与Docker Machine相比具有更好的主机集成性。

Parallels 11 / 和虚拟Windows 7。不是Parallels 7。 - shkim
谢谢。我会尝试嵌套虚拟化。很抱歉我的英语写得不太好... - shkim
不同意“比Docker Machine具有更好的主机集成能力”。 “--network host”缺失是“本地”的Docker for Mac / Windows中至少存在的一个缺点。 - goofology
请注意,嵌套虚拟化不仅需要由操作系统支持,还需要由 CPU 支持。 - rbaleksandar

19

如果你使用的是Windows 10/11 Pro或Enterprise版本并且使用Hyper-V,那么你需要做的就是启用嵌套虚拟化。在你的主机上,只需运行以下命令(让你的客户机处于关闭状态):

> Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true

现在,您可以像平常一样启动您的 Docker Desktop 并开始运行它。


1
安装了Docker和WSL 2之后,这是我在VM上运行Docker所缺少的最后一个命令。谢谢。我使用的是Windows 11 Pro,并在Hyper-V上有一个虚拟机,也安装了Windows 11。在我的情况下,我的虚拟机名称中有空格,因此我为名称使用了双引号。我以管理员身份打开了PowerShell窗口并运行了以下命令:Set-VMProcessor -VMName "My Machine Name" -ExposeVirtualizationExtensions $true之后,我就能在那个VM上运行Docker了。 - Jelgab
很遗憾,对于Ryzen处理器,你需要配置虚拟机版本10,而这需要使用Windows Server操作系统。 - undefined

6
根据Docker的条款,我认为这是不允许的。第4.1(b)(vii)节规定,您不得“在虚拟机上使用服务”。为了澄清,“‘服务’指Docker提供的应用程序、软件(包括任何开源软件)、产品和服务,包括任何测试版或试用版。” 如果我理解正确,这意味着在任何虚拟机上运行Docker都是非法的。

1
有趣。从未听说过这个。事实上,它似乎确实是这样说的。 - Brooks
1
我在社区论坛上尝试询问了这个问题(https://forums.docker.com/t/is-docker-allowed-on-virtual-machines/120441),被告知应该直接向Docker咨询。我也尝试过了,但还没有得到回复。 - nullromo
2
似乎Docker更新了这段内容。它需要一个Docker商业许可证,但一般情况下并不禁止使用。 - GeofoxCoding
@GeofoxCoding:如果(根据许可证所述)它需要 Docker 商业许可证,那么“you shall not”这个短语是什么意思?在法律术语中,“you shall not”不就意味着“被禁止了”吗?(请参阅Docker 订阅服务协议4.1.b) - wolfrevo
1
@nullromo,你能否提供一下你直接向Docker提出问题的链接? - wolfrevo
显示剩余3条评论

2

-2

之前的评论令人担忧,因为在Windows和Mac上,您运行docker是在虚拟机中进行的。Windows使用WSL2,而Mac使用arm linux机器来管理其docker。

此外,您可以在虚拟机中运行docker,但必须是Linux操作系统的虚拟机,因为Windows 7不支持docker。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接