M1芯片Mac中使用Quarkus配合Testcontainer拉取MySQL镜像报错如何解决
错误原因
你遇到的报错是因为使用的mysql:5.7.8官方镜像未提供linux/arm64/v8架构版本,M1芯片的Mac默认拉取适配arm架构的镜像,找不到对应镜像清单就会触发该错误。PostgreSQL运行正常是因为PostgreSQL官方镜像已完成多架构适配,包含arm64/v8版本支持。
解决方案
可根据实际业务场景选择以下任意一种方案解决:
- 方案1:替换为arm64兼容的MySQL系镜像
可选用MariaDB镜像作为替代,MariaDB完全兼容MySQL 5.7语法,且全版本支持arm64架构,仅需修改镜像声明即可,也可选择mysql/mysql-server:5.7系列镜像,该镜像官方提供arm64版本支持。
修改后代码示例:open class MySqlResourceTest : QuarkusTestResourceLifecycleManager { // 替换为适配arm64的镜像即可,原有逻辑无需改动 private val DATABASE: SpecifiedMySQLContainer = SpecifiedMySQLContainer("mysql/mysql-server:5.7.42").apply { withDatabaseName("test") withUsername("abc") withPassword("123456") withExposedPorts(3317) } override fun start(): MutableMap<String, String> { DATABASE.start() DATABASE.setCommand() return Collections.singletonMap("quarkus.datasource.url", DATABASE.jdbcUrl) } override fun stop() { DATABASE.stop() } } - 方案2:开启Docker Rosetta转译运行x86镜像
如果必须使用mysql:5.7.8原版镜像,打开Docker Desktop设置,进入「Features in Development」页面,勾选「Use Rosetta for x86/64 emulation on Apple Silicon」,保存重启Docker后即可通过转译运行x86架构的镜像,无需修改代码。 - 方案3:升级MySQL版本至8.0.23及以上
官方MySQL镜像从8.0.23版本开始正式提供arm64架构支持,若业务允许升级MySQL版本,直接将镜像标签修改为8.0.23以上版本即可,比如mysql:8.0.39。
内容的提问来源于stack exchange,提问作者BaoTrung Tran
相关产品推荐
相关产品推荐

