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

M1 Mac构建Quarkus Native Image Docker镜像运行报exec format error求助

问题分析与解决

核心问题

你遇到的exec ./application: exec format error是架构不匹配导致的:

  • 你的M1 Mac是ARM64架构,但当前使用的GraalVM是x86_64版本(终端通过Rosetta运行x86模式),步骤3生成的target/application是x86_64格式的原生程序。
  • 步骤5的Docker构建直接复制了本地的x86_64程序到镜像中,而M1的Docker默认运行在ARM64环境,无法执行x86格式的二进制文件。

解决步骤

方案1:构建ARM64原生镜像(推荐,适配M1架构)

  1. 替换为ARM64版本的GraalVM
    卸载当前x86版本的GraalVM,下载安装适配ARM64的GraalVM CE(版本22.1.0或更高)。
  2. 切换终端到ARM64模式
    关闭现有终端,右键点击终端图标 → 选择"新建窗口"(不要勾选"使用Rosetta打开")。
  3. 重新构建原生程序
    ./mvnw clean package -Pnative
    
  4. 修改Dockerfile适配ARM64
    编辑src/main/docker/Dockerfile.native,将基础镜像替换为ARM64版本:
    # 替换原基础镜像
    FROM quay.io/quarkus/quarkus-micro-image:2.0-arm64
    WORKDIR /work/
    RUN chown 1001 /work \
        && chmod "g+rwX" /work \
        && chown 1001:root /work
    COPY --chown=1001:root target/application /work/application
    EXPOSE 8080
    USER 1001
    CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
    
  5. 构建并运行Docker镜像
    docker build -f src/main/docker/Dockerfile.native -t quarkus/quarkus-project .
    docker run -i --rm -p 8080:8080 quarkus/quarkus-project
    

方案2:强制Docker以x86_64模式运行(无需更换GraalVM)

如果暂时不想更换GraalVM,可以让Docker通过Rosetta模拟x86环境:

  1. 构建镜像时指定平台
    docker build --platform linux/amd64 -f src/main/docker/Dockerfile.native -t quarkus/quarkus-project .
    
  2. 运行容器时指定平台
    docker run --platform linux/amd64 -i --rm -p 8080:8080 quarkus/quarkus-project
    

方案3:使用Quarkus内置的Docker构建能力(避免手动复制错误)

Quarkus的-Dnative-image.docker-build=true参数会直接在Docker内构建原生镜像并生成Docker镜像,无需手动执行docker build:

  1. 执行内置构建
    ./mvnw clean package -Pnative -Dnative-image.docker-build=true -Dquarkus.native.container-build=true
    
  2. 直接运行生成的镜像
    命令执行完成后,直接运行Quarkus生成的镜像(默认镜像名格式为groupId/artifactId:version)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:54:18