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

在Google Cloud Run部署Java Socket应用Docker镜像遇执行格式错误求助

问题描述
  • 本地构建的Java Socket应用Docker镜像运行正常,但部署到Google Cloud Run时启动失败,错误日志如下:
{  
  "textPayload": "terminated: Application failed to start: Failed to create init process: failed to load /usr/lib/jvm/java-17-openjdk//bin/java: exec format error",  
  "insertId": "631891ef0005eae9ece915df",  
  "resource": {    
    "type": "cloud_run_revision",    
    "labels": {      
      "project_id": "cumulus-0",      
      "service_name": "cumulus",      
      "revision_name": "cumulus-00001-hib",      
      "location": "asia-south1",      
      "configuration_name": "cumulus"    
    }  
  },  
  "timestamp": "2022-09-07T12:43:27.387764458Z",  
  "severity": "ERROR",  
  "labels": {    
    "instanceId": "00c527f6d4880e8a5a96fbdadc4536870f1e55a884c529efc6f860386bb3766d594380d65a657a35adebed119b05e2007cbef26928db216236f1641e97b306"  
  },  
  "logName": "projects/cumulus-0/logs/run.googleapis.com%2Fvarlog%2Fsystem",  
  "receiveTimestamp": "2022-09-07T12:43:27.390641080Z"
}
  • 核心错误:terminated: Application failed to start: Failed to create init process: failed to load /usr/lib/jvm/java-17-openjdk//bin/java: exec format error
  • 已知该错误通常因JVM不支持运行平台导致,但镜像在本地正常运行,疑惑问题根源,提供的Dockerfile如下:
FROM alpine:latest
RUN apk update && \    apk add openjdk17-jre=17.0.4.1_p1-r0

ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk

LABEL in.rainycloud.cumulus="hi@shantanubanerjee.com"

COPY build/libs/cumulus*.jar /usr/lib/

CMD ["/usr/lib/jvm/java-17-openjdk/bin/java", "-jar", "/usr/lib/cumulus-v0.1.jar", "in.rainycloud.cumulus.Main"]

EXPOSE 33333/tcp
解决方案
  • 问题根源:本地构建镜像的CPU架构与Cloud Run运行环境不匹配。Cloud Run默认使用x86_64架构,若你在ARM架构设备(如M系列Mac)上构建镜像,Alpine会默认拉取ARM版本的openjdk17-jre,导致镜像在x86_64环境下无法执行,触发exec format error。
  • 修复方案:
    1. 构建镜像时指定目标架构为x86_64,强制生成兼容Cloud Run的镜像:
      docker build --platform linux/amd64 -t cumulus .
      
      推送镜像到Google镜像仓库时,确保推送的是该指定架构的版本。
    2. 替换为支持多架构的官方Java镜像,自动适配目标环境,无需手动指定架构:
      修改后的Dockerfile:
      FROM eclipse-temurin:17-jre-alpine
      ENV JAVA_HOME=/opt/java/openjdk
      LABEL in.rainycloud.cumulus="hi@shantanubanerjee.com"
      COPY build/libs/cumulus*.jar /usr/lib/
      CMD ["java", "-jar", "/usr/lib/cumulus-v0.1.jar", "in.rainycloud.cumulus.Main"]
      EXPOSE 33333/tcp
      
  • 补充说明:Docker的--platform参数可强制构建指定架构的镜像,即使本地是ARM环境,Docker会通过QEMU模拟x86_64环境完成构建,确保镜像能在Cloud Run的x86_64实例上正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:55:21