0 0 Share PDF

Containers using HyperV isolation fail to start

Article ID: KB000966

Windows Container Isolation Basics

The Windows container technology includes two distinct levels of isolation for containers: Process and Hyper-V isolation. Both types are built and managed with the same commands. They also produce and consume identical container images.

  • Process isolation runs each container directly as a process on the host. Very similar to the way Linux runs containers.

  • Hyper-V isolation runs each container within its own lightweight Hyper-V VM. All container networking, disk I/O and CPU threads are encapsulated by Hyper-V and isolated from the host.

Windows 10 defaults to Hyper-V isolation while Windows server defaults to process isolation. You can change this behavior by editing the daemon.json file.

For a single container, you can set the isolation mode by using the --isolation=process or --isolation=HyperV flag in your docker run command.

See the Resources section for more details.

Issue

Containers fail to start when set to use Hyper-Isolation. There are a couple of generic errors that you may see. The error will be displayed in the terminal after you run your docker commands or in Windows Event Viewer - usually both.

Error response from daemon: CreateComputeSystem : The request is not supported.

Prerequisites

Hyper-V must be installed and enabled. Additionally, nested virtualization must be enabled if the container host is a virtual machine. Only certain instance types in AWS and Azure are capable of nested virt, and VMware requires extra configuration to enable it.

VMware or any other VM software cannot be used or installed on the host. Windows containers only support HyperV as the virtualization provider and will conflict with any others installed locally on the container host. The host itself can be virtual inside a setup such as VMware or RHEV - but only HyperV can be installed inside the container host.

Root Cause

Hyper-V is missing or misconfigured in Windows.

Resolution

Check the status of Hyper-V

In powershell with elevated privileges:

Get-WindowsFeature -Name Hyper-V

The command output should match this:

PS C:\temp> Get-WindowsFeature -Name Hyper-V

Display Name Name Install State
------------ ---- -------------
[X] Hyper-V Hyper-V Installed

If Hyper-V is not installed then use this command; it will probably require a reboot:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

If the command comes back blank but does not return an error, it means Nested Virtualization is not enabled on the container host.

PS C:\temp> Get-WindowsFeature -Name Hyper-V
PS C:\temp>

Resources