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

Quarkus原生应用跨架构部署报错:exec format error 求助

问题解答

跨架构直接部署可行性

这种直接将aarch64架构下构建的Quarkus原生二进制包部署到x86_64服务器运行的方式不可行。

原因是Quarkus原生构建会生成与构建平台CPU指令集强绑定的二进制文件:aarch64(ARM64)架构的二进制只能在ARM指令集的CPU上执行,而x86_64(AMD64)服务器使用的是x86指令集,两者指令集不兼容,因此会出现exec ./application: exec format error的执行格式错误。

无需目标服务器构建的替代方案

方案1:在aarch64服务器上交叉编译x86_64架构的原生二进制

利用GraalVM的交叉编译能力,在性能更强的aarch64服务器上直接编译出适配x86_64架构的原生应用:

  • 安装x86_64交叉编译工具链:
    apt-get update && apt-get install -y gcc-multilib g++-multilib
    
  • 执行Quarkus构建时指定目标架构(以Maven为例):
    ./mvnw package -Pnative -Dquarkus.native.target-arch=x86_64 -Dquarkus.native.container-build=false
    
    编译完成后,将生成的x86_64架构二进制包传输到目标服务器,即可正常运行。

方案2:基于Docker QEMU模拟的跨架构构建

通过QEMU在aarch64服务器上模拟x86_64架构,直接构建适配目标架构的Docker镜像:

  1. 安装并配置QEMU:
    apt-get install -y qemu-user-static
    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    
  2. 修改Dockerfile为多阶段构建,确保构建阶段基于x86_64架构的Quarkus原生镜像:
    # 构建阶段:指定x86_64架构的Quarkus原生构建镜像
    FROM --platform=linux/amd64 quay.io/quarkus/ubi-quarkus-native-image:22.3-java17 AS builder
    WORKDIR /project
    COPY . .
    # 执行原生构建
    RUN ./mvnw package -Pnative -Dquarkus.native.container-build=true
    
    # 运行阶段:使用ubi-minimal基础镜像
    FROM registry.access.redhat.com/ubi8/ubi-minimal:8.8
    WORKDIR /work/
    RUN chown 1001 /work \
        && chmod "g+rwX" /work \
        && chown 1001:root /work
    # 从构建阶段复制x86_64架构的二进制文件
    COPY --from=builder --chown=1001:root /project/target/*-runner /work/application
    COPY --from=builder --chown=1001:root /project/target/*.so /work/
    EXPOSE 9090
    USER 1001
    ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
    
  3. 构建x86_64架构的Docker镜像:
    docker build --platform=linux/amd64 -t your-image-name .
    
  4. 将镜像推送到私有或公共镜像仓库,x86_64服务器拉取后即可直接运行。

方案3:构建多架构Docker镜像(Manifest列表)

使用Docker Buildx构建同时支持aarch64和x86_64的多架构镜像,推送至镜像仓库后,目标服务器会自动拉取对应架构的镜像:

  1. 启用Docker Buildx:
    docker buildx create --use
    
  2. 构建并推送多架构镜像:
    docker buildx build --platform linux/amd64,linux/arm64 -t your-registry/your-image:latest --push .
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:23:30