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

aarch64架构Jenkins构建镜像部署x86 Kubernetes集群遇exec格式错误求解

解决aarch64 Jenkins构建镜像无法在x86 Kubernetes集群运行的问题

错误原因

exec /usr/local/openjdk-21/bin/java: exec format error 本质是架构不兼容:你在ARM64(aarch64)的Jenkins服务器上构建了ARM64版本的镜像,而目标Kubernetes集群是x86(AMD64)架构,指令集不匹配导致无法执行二进制文件。

解决方案

方案1:用Docker Buildx构建多架构镜像

这是最推荐的方式,能一次性构建适配多种架构的镜像:

  1. 确保Jenkins所在服务器的Docker版本≥19.03,新版本Docker默认自带buildx工具,缺失的话执行:
    apt install docker-buildx-plugin
    
  2. 创建并激活多架构构建器:
    docker buildx create --name multiarch-builder --use
    docker buildx inspect multiarch-builder --bootstrap
    
  3. 构建并推送AMD64架构镜像到仓库:
    docker buildx build --platform linux/amd64 -t your-image-repo/mockup:latest --push .
    
    • 若不需要推送,只想本地保存AMD64镜像,用--load参数替换--push(仅单架构支持)

方案2:在Dockerfile中指定目标架构

直接修改Dockerfile,强制基于AMD64的基础镜像构建:

# 明确指定使用AMD64架构的基础镜像
FROM --platform=linux/amd64 openjdk:21-slim-buster

VOLUME /tmp

ADD build/libs/mockup.jar mockup.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "mockup.jar"]

之后用常规的docker build命令构建即可,前提是Jenkins的Docker环境支持--platform参数(Docker 19.03+支持)

方案3:用QEMU在ARM64机器上模拟x86架构

通过QEMU实现跨架构编译,无需修改构建命令:

  1. 在Jenkins服务器安装QEMU工具:
    apt update && apt install -y qemu-user-static
    
  2. 注册QEMU仿真到Docker,让Docker能识别并模拟x86架构:
    docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    
  3. 之后直接用docker build -t your-image:tag .构建,Docker会自动模拟x86环境生成适配的镜像

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 17:33:33