AMD RyzenのWindowsでDocker Toolboxを動かすとCPU仮想化エラーが発生する

業務で使う新しいWindows PCが支給された。スペック的には申し分ないが、CPUがRyzenでOSがWindows 10 Home。

Hyper-Vが使えない、ひいてはDocker Desktopが使えないので、SVMをEnabledにした状態でDocker Toolboxをインストールしたが、Docker Quickstart Terminalを実行するとCPU仮想化が無効化されているというエラーになる。

もろもろ調べて、ひとまず解決できたのでメモ。

環境

Windows 10 Home 64bit バージョン1903、Git for Windows v2.22.0、VirtualBox v6.0.10、Docker Toolbox v18.09.3で 2019/7/26 に確認。

CPUはAMD Ryzen 7 3700X。なお、AMD Ryzen 5 PRO 2500Uの他端末でも同様の事例が発生していた。

状況

UEFIのAdvanced > CPU Configuration > SVMをEnabledに設定し、CPU仮想化は事前に有効化済み。タスクマネージャーのパフォーマンスタブ > CPUにて、仮想化が有効となっていることも確認した。

Git for WindowsVirtualBox、Docker ToolboxはChocolateyを使い、 cinst -y git virtualbox docker-toolbox でインストールした。それぞれのバージョンは環境参照。

VirtualBoxで64bit OSの仮想マシンを作成できることも確認しておいた。

この状態でDocker Quickstart Terminalを実行すると、以下のエラーが発生し、起動できない。

Running pre-create checks...
Error with pre-create check: "This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory"
Looks like something went wrong in step ´Checking if machine default exists´... Press any key to continue...

調査と対応

初めに、 Install Docker Toolbox on Windows | Docker Documentation を確認。

Windows 10ではSpeccy使って確認して、的なことが書いてあるので、 cinst -y speccy でインストール。

Speccyを起動してCPUを確認してみると、CPU仮想化はサポートしているが、無効化されていると表示される。

試しに、UEFIからSVMをDisabledにしてみると、CPU仮想化がSpeccyでは有効、タスクマネージャーでは無効と表示される。

他にもVirtualCheckerや海外製のCPU仮想化チェックツールを試してみたが、それらはいずれもタスクマネージャーの仮想化の有効/無効と同じ結果を表示していた。Speccyの判定のほうがおかしそうなので、UEFIからSVMをEnabledに戻しておく。

次に、Docker ToolboxのGithubリポジトリを「AMD-v enabled」で検索。すると、それっぽいissueを発見。

github.com

issueを見ると、エラーメッセージが全く同じ。他の情報もPCのスペックやWindowsがEnterpriseなこと以外は大体同じだった。(Enterpriseなのに、なんでわざわざDocker Toolboxを使っているのかはわからないが...)

issueのコメントを読み進めると、「VirtualBoxのバージョンを5.2.8に、Docker Toolboxのバージョンを18.03.0に下げると動いたよ」的なことが書いてある。

コメントに記載されているVirtualBox v5.2.8は、Docker Toolbox v18.03.0にバンドルされているバージョンの模様。まずはDocker Toolboxのダウングレードを試してみた。

cuninst -y docker-toolbox および cinst -y docker-toolbox --version 18.03.0 でDocker Toolbox v18.0.3.0をインストールし、念のためPCを再起動。

Docker Quickstart Terminalを実行すると...エラーメッセージ出ない、動いた!

対応まとめ

Chocolateyを使っている場合、以下のコマンドでDocker Toolboxのバージョン指定をしてインストールする。また、自分はよく cup -y all で一括更新するため、Docker Toolboxのバージョンをpinで固定しておく。

cinst -y git virtualbox
cinst -y docker-toolbox --version 18.03.0
choco pin add -n=docker-toolbox

Chocolateyを使っていない場合、Docker Toolboxのリリースからインストーラーをダウンロード、インストールすればいい。

v18.06系もあるが、それを使った場合もこの問題が発生するかは未確認。なお、ChocolateyのVersion Historyにはv18.06系が見当たらない

2019/8/4追記

v18.06.1-ceでも動作したというissueのコメントを見て、自端末にv18.06.1-ceをインストールし、動作することを確認。

振り返り

まとめて書くと簡単だが、実際は「Windows の機能の有効化または無効化」で仮想化関連の設定が有効になっていないか確認したり、実はCPU仮想化に対応してないんじゃないかと思ってCPUのスペックを調べたりと、原因とは関係ない無駄な作業で、トータル6時間ほどハマってしまった。

Ryzen + Docker Desktopではどうなるのか、また他のAMDのCPUでどうなるかは未確認。

ただ、WindowsでDocker使う場合、もうじきプレビュー版が公開される予定の、Docker Desktop for WSL 2が正式版になるまでは、Pro以上のエディションでDocker Desktopを使っておくのが無難と思った。

Docker ToolboxのissueはOpenなので、バージョンアップで解決されることを願い、しばらくウォッチしておく。

備考

Minikube v1.2.0を起動しても、同じようなエラーが発生した。

$ minikube start
* minikube v1.2.0 on windows (amd64)
* Creating virtualbox VM (CPUs=2, Memory=2048MB, Disk=20000MB) ...
E0726 19:08:14.249797    3476 start.go:559] StartHost: create: precreate: This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory

X Unable to start VM
* Error:        [VBOX_VTX_DISABLED] create: precreate: This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory
* Advice:        In some environments, this message is incorrect. Try 'minikube start --no-vtx-check'
* Related issues:
  - https://github.com/kubernetes/minikube/issues/3900

* If the above advice does not help, please let us know:
  - https://github.com/kubernetes/minikube/issues/new

こちらはエラーメッセージにある通り、 minikube start --no-vtx-check とオプションを付けて起動すれば、チェックが行われず動作した。

わざわざissueのURLまでエラーメッセージに書いてくれているのはありがたい。