Docker起動でエラー発生
仮想環境の構築にはDockerを使いたい派なのですが、どうしてもVMwareを使わなければいけない事情があり、しばらくVMwareを使用していました。開発も落ち着いてきたので、そろそろDockerを使おうかなと起動しようとしたところ、エラー画面共に頬を赤く染めたDockerクジラの絵が表示されました。VMwareを使う際にHyper-Vを無効にしたので、その影響だと思います。
今回は上記のエラーが出たときに必要な手順をまとめました!環境
環境 | バージョン |
---|---|
Windows10 | 1909 |
Docker(Community Edition | 18.06.1 |
VMware Workstation 15 | - |
解決策
bcdedit
を実行して確認できるhypervisorlaunchtype
の値が「Off」だったら、
管理者権限で起動したPowerShellで $ bcdedit /set hypervisorlaunchtype auto
を実行後、PCを再起動する!
やったこと
- Docker起動でエラー発生
- Hyper-Vと仮想化の有効、無効を確認
- bcdeditで状態を確認
- 再起動&Docker起動
詳細
1. Docker起動でエラー発生
Dockerを起動したところエラーが表示されました。 リンク先を確認してみると、Virtualizationの欄にBIOSという文字を発見。**あ**とのことなので、現在のPC状態を確認します。2. Hyper-Vと仮想化の有効、無効を確認
※右ウィンドウが自分の設定 Hyper-Vは有効になっている。 ※右ウィンドウが自分の設定 仮想化も有効になっていました。3. bcdeditで状態を確認
PCの再起動やコマンドによる設定の確認も試しましたが、状況は変わらず。
改めて調べてみると、Hyper-Vが有効になっているのにエラーが起きている現象が多々あることを発見しました。そこで、下記の記事と照らし合わせてみると、bcdedit
コマンドで確認できる、hypervisorlaunchtype
の値を確認する必要があることが分かりました。
実際に確認してみると、`hypervisorlaunchtype Off ` となっていたので、管理者権限で起動したPowershellで下記コマンドを実行。【Docker】 Docker for Windows導入時のエラー対応
https://qiita.com/LemonmanNo39/items/b1b104e7fb609464727b
# hypervisorlaunchtypeを切り替える
bcdedit /set hypervisorlaunchtype auto
4. 再起動&Docker起動
PCの再起動後にDockerを起動したところ、無事に起動。コンテナも問題なく起動できました。補足
■bcdeditとかhypervisorlaunchtypeって何?
bcdedit:PC起動時の情報(BCD)を確認するためのコマンド
hypervisorlaunchtype:Hyper-Vの有効/無効の設定値
先程Powershellで実行したのは、bcdeditコマンドで設定値を確認して、Hyper-Vを有効に設定した、ということですね。
参考:
■Windowsのbcdeditでブートメニューの表示順序やデフォルトを変更する
https://www.atmarkit.co.jp/ait/articles/0905/08/news096.html
■bcdeditでブート構成情報をバックアップ/リストアする
https://www.atmarkit.co.jp/fwin2k/win2ktips/1157bcdedit2/bcdedit2.html
■他の仮想環境を利用するためにHyper-Vを一時的に無効にする
https://www.atmarkit.co.jp/ait/articles/1511/13/news032.html
■さっきHyper-Vを有効にしなかったっけ...?
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
のコマンドと
bcdedit /set hypervisorlaunchtype auto
のコマンドって何が違うのか?
これについては、前者はHyper-Vの有効/無効の設定で、後者はHyper-Vの起動設定ではないか
そのため、hypervisorlaunchtype auto が autoになっていても
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-Vの設定がOFFなら
dockerは使えないのではないかと考えました。
検証
1.まずHyper-Vを無効化&再起動
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
2.再起動後、値を確認。
(画像)
Hyper-Vはチェックが外れている。
3.bcdeditコマンドを確認
→hypervisorlaunchtypeの値がなかった。
4.この状態でdockerを起動するとエラーが表示された
hypervisorlaunchtypeの値はHyper-Vが有効になっていないと表示されないようです。
■トラブルから理解するHyper vの基礎 P8
https://www.slideshare.net/NaokiAbe/hyper-v-25767921
5.Hyper-Vを有効にしたのち、再起動。bcdeditの値を確認。
hypervisorlaunchtype Auto
になっていた。
6.dockerを起動。
無事に起動。以上のことから、Dockerを使うときはWindowsのHyper-Vの設定ON→hypervisorlaunchtypeがAutoとなっている必要がありそうです。
またDockerが使えるようになったので、また開発していきたいと思います!
それでは!
参考
■Logs and troubleshooting
https://docs.docker.com/docker-for-windows/troubleshoot/#virtualization-must-be-enabled
■Windows 10 の役割を PowerShell で有効/無効にする
http://www.vwnet.jp/windows/w10/WindowsOptionalFeature.htm
■【Docker Desktop】エラーで起動できない場合の対策
https://algorithm.joho.info/programming/docker-for-windows-hardware-assisted-virtualization-and-data-execution-protection-must-be-enabled-in-the-bios/
■Windows 10で仮想化プラットフォーム「Hyper-V」を有効にする
https://www.atmarkit.co.jp/ait/articles/1806/25/news026.html