M2 Mac使用Docker运行mysql:5.7报错/bin/bash无法执行二进制文件求助
M2 MacBook运行amd64 MySQL 5.7容器报错的原因与解决办法
1. Rosetta 2未安装或未正确启用
M1芯片默认预装Rosetta 2,但部分M2机型的新系统可能没有自动安装。amd64架构的容器依赖Rosetta 2做指令转译,缺失的话就会出现二进制文件无法执行的错误。
- 终端执行
softwareupdate --install-rosetta --agree-to-license完成安装,按提示确认即可。 - 安装后重启Docker,再尝试启动容器。
2. Docker的Rosetta转译开关未开启
Docker Desktop针对Apple Silicon有专门的Rosetta转译配置,M2上如果没打开这个开关,amd64镜像无法被正确转译。
- 打开Docker Desktop偏好设置 → 进入「Features in development」页面 → 勾选「use Rosetta for x86/amd64 emulation on Apple Silicon」。
- 应用设置后重启Docker。
3. MySQL 5.7旧版amd64镜像的兼容性问题
MySQL 5.7的早期amd64镜像可能和M2的Rosetta 2转译层存在兼容性冲突,M1的转译环境和M2有细微差异(比如内核优化、转译逻辑),导致M1能跑但M2不行。
- 尝试使用5.7分支的较新版本镜像,比如
docker run --platform linux/amd64 mysql:5.7.40。 - 或者直接去掉
--platform linux/amd64参数,让Docker自动拉取适配arm64的MySQL 5.7镜像:docker run mysql:5.7(如果官方提供了arm64版本的话)。
4. Docker缓存残留导致的异常
重装Docker可能没清理干净旧的镜像缓存或配置缓存,残留的异常缓存会干扰新容器的启动。
- 先删除旧镜像:
docker rmi mysql:5.7,再重新拉取amd64版本:docker pull --platform linux/amd64 mysql:5.7。 - 彻底清理Docker数据:打开Docker Desktop → 进入「Troubleshoot」页面 → 点击「Clean / Purge data」,完成后重启Docker。
5. 系统环境变量干扰转译过程
M2系统的某些环境变量可能强制Docker使用arm64架构,导致amd64镜像的转译失效。
- 终端执行
echo $DOCKER_DEFAULT_PLATFORM,如果输出是linux/arm64,可以暂时取消这个变量设置(比如执行unset DOCKER_DEFAULT_PLATFORM),再尝试启动容器。
内容的提问来源于stack exchange,提问作者Qwertie
相关产品推荐
相关产品推荐

