在使用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。

image.png

使用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特定的问题,所以事情可能不会一帆风顺啊……)

bannerAds