IT技術に関するメモ(主にセキュリティ関連)

Hyper-V上のWindowsでVirtualBoxやDockerを動かす

本ブログ記事にはアフィリエイト広告を利用しています

Hyper-V上のWindowsでVirtualBoxやDocker等の仮想機能を使用したいケースがあると思います。
デフォルト状態では動かないため、仮想機能上で仮想機能を動かすnested virtualizationについて記載します。

前提条件

Hyper-Vが実行出来ることはもとより、プロセッサに応じて以下のような前提条件があります。

Intel プロセッサ (VT-x/EPT テクノロジ搭載)
・Hyper-V ホストは、Windows Server 2016 または Windows 10 以降である必要があります。
・VM 構成バージョン 8.0 以降

AMD EPYC/Ryzen プロセッサ以降
・Hyper-V ホストは、Windows Server 2022 または Windows 11 以降である必要があります。
・VM 構成バージョンが 10.0 以降

入れ子になった仮想化 | Microsoft Docs

仮想上で仮想機能を使用すると発生するエラー

Hyper-V上のゲストOSでDockerやVirtualBoxを起動した時のエラーを確認しました。

Docker Desktopでのエラー

Docker failed to initialize
Docker Desktop is shutting down.
System.InvalidOperationException:
Failed to deploy distro docker-desktop to C:\Users\testuser\AppData\Local\Docker\wsl\distro: exit code: -1
 stdout: Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。
詳細については、https://aka.ms/wsl2-install を参照してください

VirtualBoxでのエラー

WHvCapabilityCodeHypervisorPresent is FALSE! Make sure you have enabled the 'Windows Hypervisor Platform' feature. (VERR_NEM_NOT_AVAILABLE).
AMD-V is not available (VERR_SVM_NO_SVM).

終了コード : 
E_FAIL (0x80004005)
コンポーネント: 
ConsoleWrap
インターフェース: 
IConsole {872da645-4a9b-1727-bee2-5585105b9eed}

設定の変更

nested virtualizationが使えるように設定を変更します。
まずはホスト側OSにて、PowerShellを管理者権限で開きます。
Windowアイコンで「PowerShell」と入力すると「Windows PowerShell」のアプリが表示されますので、右クリックから[管理者として実行]を押下して起動します。

起動したPowerShellで以下のコマンドを実行し、機能を有効にします。
「<VMName>」はHyper-Vで作成しているVM名になります。VM名にスペースが含まれる場合は”(ダブルクォート)で囲ってください。

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

オフにする場合は$trueを$falseにしてコマンドを実行します。

試してみる

Docker Desktopでサンプルのイメージを動かしました。
左がDocker Desktop画面で右がブラウザからサンプルイメージにアクセスしてます。

次にVirtualBoxです。
Ubuntu Desktopを起動しています。
左がVirtualBoxの画面で右がUbuntu Desktopの画面です。

Hyper-Vに構築したWindows11でDocker、VirtualBoxが起動することが確認できました。
最後に所感ですが、仮想上で仮想を使用する場合、ホストOSに求められるスペック(CPU、メモリ等)が必然的に高くなるのと、前提条件を見るからに古い環境だと厳しいのかなと感じました。

参考文献

入れ子になった仮想化 | Microsoft Docs


当サイトはさくらインターネットのレンタルサーバーを利用しています。