Windows 11 Home上のVirtual Boxで起動したVMでDockerコンテナを上げようとしたら exited code with 132 エラーで起動に失敗した時のお話です。
Windows 10に関してもおそらく同じ方法で解決、Proに関してはStack Overflow等に情報があったのでそちらを参考にすれば解決するかと思います。
【実行環境】
- ホストOS: Windows 11 Home
- 仮想環境: Virtual Box 6.1.38
- ゲストOS: Ubuntu 18.04.06 LTS Server(64bit)
- 仮想環境: Docker 20.10.17, Docker Compose 2.6.0
【原因】
ゲストOSから見えるCPUが拡張命令セット(AVX2等)に対応していない場合にエラーになります。
私の場合はホストOSでは拡張命令セットに対応しているのにゲストOSでは対応していないという状態になっていました。
※ CPUが古い場合はCPU自体がエラーの原因となる拡張命令セットに対応していない可能性があります。
【CPUの拡張命令セット対応 確認方法】
-
- ホストOS
Coreinfoというアプリで簡単に確認できます。
Coreinfo URL: https://docs.microsoft.com/ja-jp/sysinternals/downloads/coreinfo - ゲストOS
例)拡張命令セットavx2に対応しているか確認する場合
以下コマンドでflagsにavx2が出力されていれば対応しています。$ sudo cat /proc/cpuinfo | grep avx2 flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx rdrand lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch vmmcall fsgsbase avx2 invpcid rdseed clflushopt arat
- ホストOS
【解決方法】
1.ホストOSでWSLを使用している等で「Linux用Windowsサブシステム」、「仮想マシンプラットフォーム」が有効化されている場合は無効化し、再起動します。
「コントロールパネル > プログラムと機能 > Windowsの機能の有効化または無効化」で設定画面が表示されます。
2.「仮想化ベースのセキュリティ」が有効になっている場合は無効にします。
スタートメニューの検索バーに「システム情報」と入力、もしくは 「スタートメニュー > すべてのアプリ > Windowsツール > システム情報」を選択して表示されたシステム情報画面で有効/無効の確認できます。
無効にするにはスタートメニューの検索バーに「コア分離」と入力、もしくは「スタートメニュー > 設定 > プライバシーとセキュリティ > Windowsセキュリティを開く > デバイス セキュリティ > コア分離の詳細」を選択して表示されたWindowsセキュリティ コア分離画面のトグルボタンを「オフ」にして再起動します。
3.VirtualBoxのVMを起動し、ゲストOSのCPUが拡張命令セットをサポートしているのを確認後、dockerコンテナ起動してみてください。
1.2.の設定前後でゲストOSのflagsに以下の差分があったので、これらの拡張命令セットによる影響でエラーになっていた場合は exited code with 132 エラーは解消されていると思います。
mmxext pclmulqdq x2apic movbe popcnt aes xsave avx rdrand abm sse4a misalignsse avx2 rdseed clflushopt