Mac M2指定--platform linux/amd运行MongoDB容器报错求助
Mac M2指定linux/amd架构运行MongoDB容器报错处理
问题描述
在Mac M2设备上指定--platform linux/amd参数运行MongoDB容器,执行命令:
docker run --name mongodb -d -p 27017:27017 mongodb/mongodb-community-server:latest
触发如下错误:
2023-12-07 08:57:50 Traceback (most recent call last): 2023-12-07 08:57:50 File "/usr/local/bin/docker-entrypoint.py", line 637, in <module> 2023-12-07 08:57:50 subprocess.run(get_final_command_line_args(), check=True) 2023-12-07 08:57:50 File "/usr/lib/python3.10/subprocess.py", line 526, in run 2023-12-07 08:57:50 raise CalledProcessError(retcode, process.args, 2023-12-07 08:57:50 subprocess.CalledProcessError: Command '['mongod', '--bind_ip_all']' died with <Signals.SIGILL: 4>.
其他linux/amd架构容器可正常运行,该镜像的arm版本也能正常工作。
原因分析
错误中的SIGILL表示非法指令,说明最新版MongoDB的amd64镜像使用了Rosetta 2(Mac M系列转译amd64程序的工具)不支持的指令集,导致转译失败。
解决方法
- 指定兼容的MongoDB版本:选择对Rosetta 2兼容性更好的旧版本,比如5.0或4.4系列的amd64镜像:
docker run --name mongodb -d -p 27017:27017 --platform linux/amd64 mongodb/mongodb-community-server:5.0 - 避免使用
latest标签:latest默认指向最新版本,新版本可能引入了Rosetta不支持的指令,固定版本能避免这类问题。 - 优先使用arm架构镜像:如果业务没有强制要求amd64,直接运行arm版本(不添加
--platform参数,Docker会自动匹配M2的arm64架构),性能和兼容性都更优。 - 升级转译工具:更新Docker Desktop到最新版本,同时确保Rosetta 2是最新状态,提升转译的兼容性。
内容的提问来源于stack exchange,提问作者spitfiredd
相关产品推荐
相关产品推荐

