Docker - Win10 Hyper-V 和 VirtualBox 衝突的問題

最近有同學問,在自己的Win10上,使用VirtualBox或相關的工具例如Vagrant,docker-machine等創建虛擬機,會提示電腦沒有開啓Intel的VT-x或者ADM-V,要求你去BIOS開啓。

重啓電腦進入BIOS,發現VT-x明明已經enable開啓了,這是爲什麼呢?

此時的原因多半是因爲,當前的win10開啓了微軟的Hyper-V虛擬化支持,解決方法也很簡單,就是把Hyper-V關掉,最簡單的關閉Hyper-V的辦法是以管理員權限打開Powershell,然後運行

bcdedit /set hypervisorlaunchtype off

然後重啓電腦即可。

那爲什麼開啓了Hyper-V以後,VirtualBox或者VMware就用不了呢?這裏有一篇很好的解答https://superuser.com/questions/1208850/why-virtualbox-or-vmware-can-not-run-with-hyper-v-enabled-windows-10

簡單來講,像VirtualBox或者VMware workstations,他們是二層的hypervisors(或者叫Type 2),什麼叫2層的hypervisors,就是它需要運行在一個宿主機上,類似需要一個Host OS,這個OS需要直接運行在物理機上,然後我們在這個Host OS上安裝VirtualBox或者VMware workstation。而像Hyper-V或者Vmware的ESxi,他們是level 1的hypervisors(或者叫Type 1),就是他們可以直接安裝在物理機上,不需要Host OS。

理解了這一個以後,我們再看開啓了Hyper-v的Win10,它就類似在Hyper-v上通過虛擬化安裝運行了Win10,也就是此時的Win10我們就可以把它看成一臺虛擬機了,在這個虛擬機裏面,我們安裝的VirtualBox,它無法訪問到之前可以訪問到的VT-x,所以也就無法使用虛擬化技術了。

對於這個限制,個人感覺VirtualBox後續可能會改進,因爲隨着一些需要Hyper-v支持的工具的退出,越來越多人可能會選擇開啓Hyper-V功能,比如WSL2的推出(https://devblogs.microsoft.com/commandline/wsl-2-is-now-available-in-windows-insiders/)

VirtualBox6.0已經加入了Nested Virtualization的支持,就是在一個虛擬機裏通過virtualbox創建虛擬機,就是虛擬機的嵌套,但是這個只支持AMD的CPU,而且應該不支持Hyper-v的虛擬機裏創建虛擬機這種嵌套。

等等吧,個人還是比較看好Virtualbox,也比較喜歡Vagrant。

(如果要重新打開Hyper-V,可以以管理員身份打開Powershell,然後運行 bcdedit.ext /set hypervisorlaunchtype auto start 然後重啓電腦)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章