Proxmox 解决 Docker 容器 MongoDB 创建报错 "MongoDB 5.0+ requires a CPU with AVX support"

问题背景

在 Proxmox 虚拟化环境中运行 Docker 容器时,尝试启动 MongoDB 5.0 或更高版本可能会遇到以下错误:

MongoDB 5.0+ requires a CPU with AVX support

此错误表明宿主机的 CPU 或虚拟机配置未启用 AVX(Advanced Vector Extensions)指令集支持,而 MongoDB 5.0+ 需要此功能才能运行。

检查 CPU 是否支持 AVX

通过以下命令检查宿主机的 CPU 是否支持 AVX:

grep avx /proc/cpuinfo

如果输出中包含 avx,则 CPU 支持 AVX 指令集。如果无输出,则 CPU 不支持 AVX。

验证虚拟机配置

如果 Proxmox 虚拟机未正确传递宿主机的 AVX 支持,需检查虚拟机的 CPU 类型设置:

  1. 登录 Proxmox 管理界面,选择目标虚拟机。
  2. 进入“硬件”选项卡,查看“处理器”类型。
  3. 确保 CPU 类型设置为 host 或明确支持 AVX 的型号(如 Haswell 或更高版本)。
修改虚拟机配置

若虚拟机未使用 host CPU 类型,可通过以下步骤修改:

  1. 关闭虚拟机。
  2. 编辑虚拟机配置文件(通常位于 /etc/pve/qemu-server/<VMID>.conf),添加或修改以下行:
args: -cpu host,+avx
  1. 保存文件并重启虚拟机。
使用兼容性较低的 MongoDB 版本

如果宿主机的 CPU 确实不支持 AVX,可改用 MongoDB 4.4 或更低版本。例如,在 Docker 中运行:

docker run --name mongodb -d mongo:4.4
启用嵌套虚拟化(可选)

如果 Proxmox 本身运行在虚拟化环境中(如 VMware 或 KVM),需确保嵌套虚拟化已启用:

  1. 在 Proxmox 宿主机的 /etc/modprobe.d/kvm.conf 文件中添加:
options kvm_intel nested=1
  1. 重新加载模块:
modprobe -r kvm_intel && modprobe kvm_intel
测试解决方案

启动 MongoDB 容器后,验证是否正常运行:

docker exec -it mongodb mongosh --eval "db.version()"

如果返回版本信息且无错误,则问题已解决。

更多推荐