You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apple M1芯片Docker中用OpenJDK8执行sbt compile出现SIGSEGV错误如何解决?

问题核心原因

Apple M1属于arm64架构,你强制容器运行linux/amd64架构的镜像时,Docker底层依赖QEMU对x86指令做动态转译,OpenJDK 8的C2即时编译器在该转译环境下存在已知兼容缺陷,编译Scala代码时触发段错误导致崩溃。

解决方案

方案1:禁用C2即时编译器(改造成本最低)

在sbt执行参数中添加-XX:TieredStopAtLevel=1,禁用C2编译器仅保留轻量的C1编译器,可直接避开转译兼容问题,完整执行命令如下:

sbt -XX:TieredStopAtLevel=1 -Dsbt.ivy.home='.ivy2' -Dsbt.global.base='.sbt' -Dsbt.repository.config='.sbt/repositories' compile

如果需要永久生效,可在项目根目录新建/编辑.jvmopts文件,添加一行-XX:TieredStopAtLevel=1即可。

方案2:切换为arm64原生镜像(性能最优)

直接使用适配arm64架构的基础镜像,从根源避免QEMU转译:

  • 修改Dockerfile的基础镜像为arm64兼容的OpenJDK 8版本:
    FROM --platform=$BUILDPLATFORM eclipse-temurin:8-jdk-jammy
    
  • 删除docker-compose.yml中platform: linux/x86_64配置
  • 重新构建容器后再执行编译即可,sbt 0.13.15原生支持arm64架构,无兼容问题。

方案3:升级Docker Desktop

如果上述方案不适用,将Docker Desktop升级到最新正式版,新版本内置的QEMU转译层修复了大量JVM相关的兼容缺陷,升级后重试编译即可。

内容的提问来源于stack exchange,提问作者jiamae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 21:54:03