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

在eclipse-temurin:21镜像安装Sencha Cmd遇JVM版本错误求助

在eclipse-temurin:21容器中安装Sencha Cmd 7.8.0.59失败,提示需要JDK 1.8

我尝试基于eclipse-temurin:21 Docker镜像安装Sencha Cmd 7.8.0.59,使用的Dockerfile如下:

FROM eclipse-temurin:21 as builder

ENV CMD_VERSION="7.8.0.59"

RUN apt-get update && apt-get install -y --no-install-recommends \
        wget \
        unzip \
        libfreetype6 \
        fontconfig \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /work

RUN wget --no-cookies https://cdn.sencha.com/cmd/${CMD_VERSION}/no-jre/SenchaCmd-${CMD_VERSION}-linux-amd64.sh.zip \
    && unzip SenchaCmd-${CMD_VERSION}-linux-amd64.sh.zip -d . \
    && chmod o+x SenchaCmd-${CMD_VERSION}-linux-amd64.sh \
    && ./SenchaCmd-${CMD_VERSION}-linux-amd64.sh -Dall=true -q -dir /opt/Sencha/Cmd/${CMD_VERSION}

但安装程序执行失败,报错信息:

No suitable Java Virtual Machine could be found on your system.
The version of the JVM must be 1.8.
Please define INSTALL4J_JAVA_HOME to point to a suitable JVM.

容器内执行java -version的输出:

openjdk version "21.0.3" 2024-04-16 LTS
OpenJDK Runtime Environment Temurin-21.0.3+9 (build 21.0.3+9-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.3+9 (build 21.0.3+9-LTS, mixed mode, sharing)

执行echo "$JAVA_HOME"的输出:

/opt/java/openjdk

请问如何解决这个问题?这是Sencha Cmd 7.8.0.59 Linux安装程序的bug吗?(我在M2 Mac上用temurin 21搭配osx-arm版本的安装程序可以正常运行。)


解决方法

方案1:用多阶段构建,临时使用JDK 8完成安装

Sencha Cmd的Linux无JRE版本安装包,其底层的Install4J引导程序强制要求安装阶段使用JDK 8。可以通过多阶段构建,先在JDK 8环境下完成安装,再将安装好的Cmd复制到JDK 21的最终镜像中:

修改后的Dockerfile示例:

# 最终镜像使用JDK 21
FROM eclipse-temurin:21 as final
ENV CMD_VERSION="7.8.0.59"

# 构建阶段使用JDK 8安装Sencha Cmd
FROM eclipse-temurin:8 as builder
ENV CMD_VERSION="7.8.0.59"

RUN apt-get update && apt-get install -y --no-install-recommends \
        wget \
        unzip \
        libfreetype6 \
        fontconfig \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /work

RUN wget --no-cookies https://cdn.sencha.com/cmd/${CMD_VERSION}/no-jre/SenchaCmd-${CMD_VERSION}-linux-amd64.sh.zip \
    && unzip SenchaCmd-${CMD_VERSION}-linux-amd64.sh.zip -d . \
    && chmod o+x SenchaCmd-${CMD_VERSION}-linux-amd64.sh \
    && ./SenchaCmd-${CMD_VERSION}-linux-amd64.sh -Dall=true -q -dir /opt/Sencha/Cmd/${CMD_VERSION}

# 将安装好的Sencha Cmd复制到最终镜像
FROM final
COPY --from=builder /opt/Sencha /opt/Sencha

# 配置Sencha Cmd到环境变量
ENV PATH="/opt/Sencha/Cmd/${CMD_VERSION}:${PATH}"

方案2:下载带JRE的Sencha Cmd安装包

如果不想额外引入JDK 8,可以直接下载包含JRE的安装包,安装程序会自带符合要求的JVM,无需依赖系统JDK:

修改Dockerfile中的下载链接,去掉no-jre/路径:

https://cdn.sencha.com/cmd/${CMD_VERSION}/SenchaCmd-${CMD_VERSION}-linux-amd64.sh.zip

关于是否是bug的说明

这不算严格意义上的bug,而是Linux版本Sencha Cmd安装程序的设计限制:其底层的Install4J引导程序仅支持JDK 8启动,而Mac版本的安装程序做了适配,允许在高版本JDK下执行。但Sencha Cmd本身安装完成后,完全可以在JDK 21环境下正常运行。

内容的提问来源于stack exchange,提问作者Bent André Solheim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:45:15