dockerをインストールしたらvagrant up(virtualbox)が起動しなくなった件

トラブル内容

今までWindows10環境下で

  • Vagrant
  • VirtualBox

で仮想マシンを構築してたんですが

「今の時代、Dockerが使えないと話にならない」みたいな話をよく聞くので、試しにDockerを入れてみることにしました。

vagrant+virtualbox+rlogin

▲今まではVagrant+Virtualboxで仮想マシンを立ち上げてRloginをターミナルとして使っていた。

 

そこまでは良かったんですが

Dockerをインストールするとvagrant upしても、Virtualboxが起動しなくなってしまった・・・。

>vagrant up
Stderr: VBoxManage.exe: error: VMMR0_DO_NEM_INIT_VM failed: VERR_NEM_MISSING_KERNEL_API_2 (VERR_NEM_MISSING_KERNEL_API_2).

VBoxManage.exe: error: VT-x is not available (VERR_VMX_NO_VMX)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole
PS C:\Users\hamati\OneDrive\vagrant\ubuntu64_18>

このようにerrorを吐くように。

(ググってみると「DockerとVirtualBoxは共存できない」というのは割と有名なことだったみたいですが・・・)

解決策

原因をいろいろ検索した結果、

Windowsの機能の中の Windowsハイパーバイザープラットフォームにチェックを付けると、再びvagrant upできるようになりました。


▲この中のWindowsハイパーバイザープラットフォームにチェックをつける。そして再起動。

 

以下のようにDockerとVirtualBox、同時に起動できるようになりました。

VirtualBoxとDockerを共存している様子

▲RloginでVirtualBoxに、Windowsターミナル(Powershell)でDockerにログインしている様子。

原因

すごくややこしい話なんですが、順に解説すると

  1. 最近のCPUには仮想化機能(IntelCPUならVT-X、AMDのCPUならAMD-Vという名前が付けられている)が標準で付いている。
  2. VT-XAMD-Vを利用してWindows10でハイパーバイザー環境(要するに仮想マシン)を構築しようぜ!な機能をHyper-Vと言う。(HyperーVはWindows10Pro以上じゃないと使えない。)
  3. Hyper-Vを利用してWindowsでLinuxを使えるようにしまっせー」なソフトをWSL2と呼ぶ。
  4. WSL2からHyper-Vを利用する場合は、Windows10Pro以上じゃなくても使える。
  5. DockerはWSL2を利用してコンテナ環境をつくる。
  6. VirtualBoxもまたVT-XAMD-Vを利用して仮想マシンを構築する。
  7. Hyper-VをONにしてしまうと、Hyper-VがVT-XAMD-Vを占有してしまって、他の仮想化ソフト(VirtualBoxなど)が仮想化できなくなってしまう。

という感じ。

図にすると以下のような感じ。

Hyper-VをONにしてしまうと、Hyper-VがVT-XやAMD-Vを占有してしまって、他の仮想化ソフト(VirtualBoxなど)が仮想化できなくなってしまう。

 

ここで、WindowsハイパーバイザープラットフォームをONにすると、Hyper-V経由でVT-XやAMD-Vを共有(?)できるようになるらしい。

要するに以下のような感じにできるらしい。

WindowsハイパーバイザープラットフォームをONにすると、Hyper-V経由でVT-XやAMD-Vを共有(?)できるようになるらしい。

 

そんな感じです。

 

ちなみに余談ですが

Dockerを使ってみた結果、Vagrantより遥かに便利そうだったので、これを機にDockerに乗り換えることにしました。

なので別に今回調べた内容は完全に無駄になってしまったのでした・・・。

さようならVagrant。よろしくねDocker。

 

おわり

仮想環境
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました