如何在M1芯片Mac上运行QueryDSL项目的测试套件
Apple Silicon Mac 运行 QueryDSL 测试套件解决方案
linux/arm64/v8报错的核心原因是QueryDSL官方提供的docker-compose配置中的数据库镜像大多仅适配x86架构,Apple Silicon系列Mac默认的arm64架构无法直接运行,按以下步骤操作即可解决:
1. 开启Docker Rosetta 转译支持
打开Docker Desktop设置,进入「Features in Development」页面,勾选 Use Rosetta for x86/64 emulation on Apple Silicon,保存设置后重启Docker。这一步可以让Docker通过转译运行绝大多数x86架构的镜像。
2. 修改docker-compose.yml配置
给所有数据库服务添加platform参数,强制指定使用x86架构运行,示例如下:
services: mysql: platform: linux/amd64 image: mysql:5.6.38 # 其余原有配置保持不变 postgresql: platform: linux/amd64 image: mdillon/postgis:9.3-alpine # 其余原有配置保持不变 # 所有其他服务(oracle、cubrid、mongo、db2、sqlserver、firebird等)都统一添加platform: linux/amd64配置
3. 替换无兼容版本的老旧镜像
部分过老的镜像即便开启转译也无法正常运行,建议替换为兼容arm64架构的近似版本,不会影响测试结果:
- mysql:5.6.38 替换为
mysql:5.7或mariadb:10.3,二者和mysql 5.6语法高度兼容 - mdillon/postgis:9.3-alpine 替换为
postgis/postgis:13-3.3-alpine,官方维护的postgis镜像,同时支持x86和arm架构 - mongo:3.6.1 替换为
mongo:4.4,兼容arm架构且接口无差异
4. 跳过兼容性差的非必要数据库(可选)
Cubrid、Oracle 11g、DB2这三类数据库的x86镜像转译后稳定性极差,如果你不需要针对这三类数据库做测试,可直接只启动你需要的服务:
docker-compose up -d mysql postgresql mongo sqlserver firebird
启动后执行docker-compose ps检查所有服务的状态为healthy即可正常运行测试。如果仅需测试特定模块,也可在Maven构建命令中指定排除对应数据库的测试用例。
内容的提问来源于stack exchange,提问作者Lisa Dina
相关产品推荐
相关产品推荐

