1
2

More than 1 year has passed since last update.

WindowsでVirtualBoxとDockerを併用するときに気をつけること(AVX)

Posted at

概要

Windows環境で、VirtualBoxとDockerを併用しているときにVirtualBoxで躓いた箇所があったのでそのときのメモです。

詳細

ことの発端

私の所属している会社では、昔からあるプロジェクトはVirtualBox、最近のプロジェクトはDockerでの開発を行っています。
VirtualBoxの6.1.14~6.1.16あたりでDockerとVirtualBoxが共存で動かせるとのことだったので、共存で動くように設定し、昔からあるプロジェクトの作業をするときはVirtualBoxを立ち上げ、最近のプロジェクトの場合はDockerを立ち上げて作業を行っています。

※VirtualBoxとDockerの共存設定参考記事

そのような環境で作業している中である時、昔からある方のプロジェクトでmongoDBのバージョン3系列から5もしくは6にアップデートする要件があり、じゃあVirtualBox上のCentOS7にmongoDB6.0を入れて動かしてみたところ・・・

Illegal instruction というログが出て動きませんでした。。。

詳しいログ
$ systemctl status mongod.service

--->
● mongod.service - MongoDB Database Server
   Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
   Active: failed (Result: signal) since Sun 2022-10-23 05:20:28 EDT; 7s ago
     Docs: https://docs.mongodb.org/manual
  Process: 18762 ExecStart=/usr/bin/mongod $OPTIONS (code=killed, signal=ILL)
  Process: 18761 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
  Process: 18757 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS
)
  Process: 18756 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)

Oct 23 05:20:28 localhost.localdomain systemd[1]: Starting MongoDB Database Server...
Oct 23 05:20:28 localhost.localdomain systemd[1]: mongod.service: control process exited, code=kille...s=4
Oct 23 05:20:28 localhost.localdomain systemd[1]: Failed to start MongoDB Database Server.
Oct 23 05:20:28 localhost.localdomain systemd[1]: Unit mongod.service entered failed state.
Oct 23 05:20:28 localhost.localdomain systemd[1]: mongod.service failed.
Hint: Some lines were ellipsized, use -l to show in full.

原因

mongoDBの5.0系列以降ではAVXという拡張命令セットが有効になっている必要があるそうです。

MongoDB 5.0 requires use of the AVX instruction set, available on
select Intel and AMD processors.

※mongodbのproduction-notes/#platform-support-notes
のページ記載

AVXが有効であれば(CentOS7上で)lscpuコマンドでFlagsの箇所を見るとavxavx2と表示されるはずが、表示されていませんでした。

解決

VirtualBoxとDockerを共存させるために

bcdedit /set hypervisorlaunchtype auto

のコマンドを行っていたため、VirtualBoxで起動したCentOSのAVXが有効になっていない状態となっていました。

管理者権限で起動したコマンドプロンプト(またはPowerShell)で下記のコマンドを実行した後ホストを再起動することでVirtualBoxで起動したCentOSのAVXが有効になります。

bcdedit /set hypervisorlaunchtype off

ただし、この状態ではDockerやWSLを使うことはできなくなってしまう。

image.png
image.png

DockerやWSLを使うときには管理者権限で下記コマンド実行後、ホストマシンを再起動する必要があります。

bcdedit /set hypervisorlaunchtype auto

※私の環境の場合、「Windowsの機能の有効化または無効化」の方からHyper-Vの機能のON/OFFではAVXの有効無効は関係ありませんでした。

備考

終わりに

WindowsでVirtualBoxとDocker共存できる!やったー!って思ってたところ、こういう事象があると面倒ですね。。。(対応は可能とは言えホストマシンの再起動が必要なので面倒・・・)
可能であれば昔のものもDockerに移行したほうがいいのかなぁと(とは言えWindowsのDocker固有の問題もあるのですんなりとはいかない現実。。。)

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2