在使用Windows上的VirtualBox和Docker时需要注意的事项(AVX)
概括起来
以下是一份关于在Windows环境下,同时使用VirtualBox和Docker时在VirtualBox中遇到问题的备忘录。
請提供中文詳細資訊。
事件的起因
在我所属的公司中,我们一直使用VirtualBox进行老项目的开发,而最近的项目则采用Docker进行开发。由于VirtualBox的6.1.14~6.1.16版本能够与Docker共存运行,所以进行了相应的设置,当需要进行老项目的工作时,我们启动VirtualBox;而对于最近的项目,则启动Docker来进行工作。
※VirtualBox和Docker兼容设置的参考文章
在这样的环境下工作时,有一个传统项目需要将mongoDB的版本从3系列升级到5或6,并且我在VirtualBox上的CentOS7上安装了mongoDB 6.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需要使用AVX指令集,该指令集在部分英特尔和AMD处理器上可用。
※mongodbのproduction-notes/#platform-support-notes
のページ記載
AVXが有効であれば(CentOS7上で)lscpuコマンドでFlagsの箇所を見るとavxやavx2と表示されるはずが、表示されていませんでした。
解决问题
为了让VirtualBox和Docker共存
bcdedit /set hypervisorlaunchtype auto
由于执行了某个命令,导致在VirtualBox上启动的CentOS处于未启用AVX的状态。
在以管理员权限启动的命令提示符(或PowerShell)中执行以下命令后重新启动主机,就可以启用在VirtualBox中启动的CentOS的AVX。
bcdedit /set hypervisorlaunchtype off
然而,在此状态下将无法使用Docker或WSL。

使用Docker或WSL时,需要以管理员权限运行以下命令,并重新启动主机。
bcdedit /set hypervisorlaunchtype auto
在我的环境中,从“启用或禁用Windows功能”的选项中,启用或禁用Hyper-V功能与AVX的启用或禁用无关。
準備預訂。
-
私の場合はmongoDBをVirtualBox上のCentOS7に入れて動かそうとしたらこの事象に遭遇しましたが、ざっくり調べたところ、tensorflowなんかを動かすときにもavxが必要なようです
Tensorflowを1.6以上にすると、CPUによっては実行できなくなる/tensorflowのバージョン指定インストールの方法
VirtualBoxではなく、VMWareなら・・・と試してみたところ、VMWareの場合は特に設定もなく動きました。
会社PCがIntel製CPU(i7-10510U)、家PCがAMD製CPU(Ryzen 5 5600X)だったので、家PCの方でも試してみたところ、同じ結果となりました
结束
虽然在Windows上能够同时使用VirtualBox和Docker!太好了!但是,当出现这种情况时,真的很麻烦啊。。。(虽然还是有可能解决,但需要重新启动主机,真是麻烦啊……)
如果可能的话,我还是考虑将旧的东西迁移到Docker上吧(不过,Windows上也存在一些Docker特定的问题,所以事情可能不会一帆风顺啊……)