業務で使う新しい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 Windows、VirtualBox、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を発見。
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までエラーメッセージに書いてくれているのはありがたい。