Tuesday, 24 November, 2020

4's a Crowd - Getting Windows 10, Docker, Hyper-V and VirtualBox working together (Part 2)

How to install Hyper-V or Docker on Windows 10 and still use VirtualBox using Boot Menu Options

Who Should Read This

If you’re on Windows 10 and trying to use Docker, Hyper-V, and VirtualBox all together on the same machine at the same time, then this article is for you.

Preamble

I wrote an article a month ago explaining how to install Docker on Windows 10 and continue to use VirtualBox (see https://justaguycoding.com/jagc-blog/posts/win10dockervbox/).

This was an issue, for me, as I have legacy software development environments using Vagrant and VirtualBox. Since writing the article and using the set-up explained in it I've changed the way I work and wanted to report back.

The Problem

The problem is Microsoft's Hyper-V and VirtualBox don't work at the same time on the same system.

This is because Hyper-V is a type-1 bare metal Hypervisor and VirtualBox is a type-2 (OS) hosted Hypervisor, meaning Hyper-V starts first and runs Windows 10 as a "special virtual server" preventing VirtualBox from accessing the underlying Intel VT-X capabilities. Read more about it on https://superuser.com/questions/1208850/why-cant-virtualbox-or-vmware-run-with-hyper-v-enabled-on-windows-10.

The issue is brought to a head when you try to install and use Docker on a system where VirtualBox is already in use.

The Solution

If you need a solution where both Docker and Virtualbox need to work together at the same time take a look at https://justaguycoding.com/jagc-blog/posts/win10dockervbox/.

If you don't need to use Hyper-V or Docker and VirtualBox to work at the same time, on the same machine, then one solution is to boot your machine with Hyper-V running or not as and when you need to use it.

It turns out this is fairly easy to set-up, and you don't need to uninstall VirtualBox when you install Hyper-V because when Hyper-V isn't running VirtualBox will run and work just fine.

The tool for managing boot settings is BCDEdit see https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/bcdedit-command-line-options for the full rundown.

Here's how to configure Windows 10 to "dual boot" and provide options for running with and or without Hyper-V:

  • Firstly, install Hyper-V. Hint: copy and paste "Control Panel\Programs\Programs and Features" into Windows Explorer and select "Turn Windows Features on or off".
  • Next, run the Windows command prompt as an administrator. Hint: don't use Powershell.
  • Type bcdedit for an output giving your current boot loaders.
  • Type: bcdedit /copy {current} /d "No Hyper-Visor" . You'll see something like the entry was successfully copied to {49916baf-0e08-11db-9af4-000bdbd316a0}.
  • Type: bcdedit /set {49916baf-0e08-11db-9af4-000bdbd316a0} hypervisorlaunchtype off

Now when you reboot your machine you'll be given the option to boot with Hyper-V or without it. The default configuration here is to boot with Hyper-V enabled.

Find out more about adding boot entries and how to configure them at https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/adding-boot-entries.

Closing Thoughts

I find this solution more convenient than using the legacy Docker Toolbox and VirtualBox without installing Hyper-V because it allows me to use Hyper-V with new projects.

Want to Thank Me?

Did you like the article? Was it helpful? If so why not buy me a coffee using Paypal? Buy me a coffee at https://www.paypal.me/justaguycoding