如何在Ubuntu宿主机的Windows Server 2016虚拟机中安装Docker?
能否在你的环境中安装Docker?
答案是可以,但得搞定几个关键配置,我给你一步步捋清楚:
1. 先明白问题出在哪
你碰到的“必须在BIOS中启用虚拟化”提示,核心原因是Docker for Windows依赖Hyper-V(或者Windows容器功能),而Hyper-V需要你的Windows虚拟机具备嵌套虚拟化能力——简单说就是让宿主机的虚拟化权限透传给虚拟机。现在任务管理器显示虚拟化不可用,说明你的Windows虚拟机还没拿到这个权限,光在虚拟机里开Hyper-V没用。
2. 必须完成的配置步骤
第一步:确认物理机BIOS的虚拟化已开启
先确保你装Ubuntu的那台物理机器,BIOS里已经开了Intel VT-x(如果是AMD CPU就是AMD-V),这是所有虚拟化的基础,宿主机本身没开的话,虚拟机根本拿不到虚拟化能力。
第二步:给VirtualBox的Windows虚拟机开嵌套虚拟化
VirtualBox从6.0版本开始支持Intel CPU的嵌套虚拟化(AMD的支持稍晚),操作步骤如下:
- 先把你的Windows虚拟机彻底关掉
- 在Ubuntu宿主机的终端里执行这条命令(把引号里的名字换成你实际的虚拟机名称):
VBoxManage modifyvm "你的Windows虚拟机名称" --nested-hw-virt on - 重新启动Windows虚拟机
第三步:验证虚拟化状态
启动Windows Server后,打开任务管理器→切换到“性能”标签,看CPU区域的“虚拟化”是否显示“已启用”。要是显示了,说明嵌套虚拟化生效了。
第四步:重新安装Docker for Windows
这时候再去装Docker for Windows就没问题了,安装过程会自动配置Hyper-V相关组件(之前开了Hyper-V也不影响),安装完成后Docker就能正常启动。
3. 备选方案:嵌套虚拟化搞不定怎么办?
如果你的CPU不支持嵌套虚拟化,或者VirtualBox配置始终没成功,还可以试试纯Windows容器模式(不需要Hyper-V):
- 打开Windows Server的“服务器管理器”→添加角色和功能,勾选“容器”功能完成安装
- 下载安装Docker EE(企业版),Windows Server上的Docker EE支持纯容器模式,不需要依赖Hyper-V
几个小提醒
- Ubuntu 16.04版本比较老,建议把VirtualBox更到最新的稳定版(比如6.x或7.x),旧版本可能不支持嵌套虚拟化
- 如果是AMD CPU,VirtualBox对嵌套虚拟化的支持有限,得确认你的VirtualBox版本是否支持AMD的嵌套虚拟化
内容的提问来源于stack exchange,提问作者modeller




