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

使用jlink制作的自定义JRE在Docker Alpine中执行java命令提示未找到

解决Alpine镜像中运行自定义JRE提示"java: not found"的问题

问题原因

构建阶段使用的gradle:7.5.1-jdk17-jammy是基于Ubuntu(GNU C库/glibc)的镜像,而Alpine Linux默认使用musl libc,两者的C库实现不兼容。你用jlink生成的自定义JRE二进制文件是针对glibc编译的,在musl环境下动态链接器无法找到依赖的glibc库,因此会出现看似文件不存在的错误(实际是依赖缺失)。

解决方案

有两种可行的解决方式:

1. 在Alpine中安装glibc兼容层

Alpine提供了gcompat包来兼容glibc程序,只需在Alpine阶段添加安装命令即可:

FROM gradle:7.5.1-jdk17-jammy As build

WORKDIR /build

COPY my-source my-source

RUN cd my-source && gradle clean build

RUN jlink \
    --module-path /... \
    --add-modules ... \
    --output jre-custom \
    --strip-debug \
    --no-header-files \
    --no-man-pages \
    --compress 2

FROM alpine:latest
WORKDIR /deployment

# 安装glibc兼容层
RUN apk add --no-cache gcompat

COPY --from=build /build/jre-custom jre-custom/
COPY --from=build /build/my-source/build/libs/*.jar build/app.jar

CMD ["jre-custom/bin/java","-jar","build/app.jar"] 
  
EXPOSE 3009

2. 改用基于glibc的轻量镜像

如果不想依赖兼容层,可以替换Alpine为基于glibc的轻量级镜像,比如debian:bookworm-slim,这样无需额外安装依赖,直接运行自定义JRE即可:

FROM gradle:7.5.1-jdk17-jammy As build

WORKDIR /build

COPY my-source my-source

RUN cd my-source && gradle clean build

RUN jlink \
    --module-path /... \
    --add-modules ... \
    --output jre-custom \
    --strip-debug \
    --no-header-files \
    --no-man-pages \
    --compress 2

FROM debian:bookworm-slim
WORKDIR /deployment

COPY --from=build /build/jre-custom jre-custom/
COPY --from=build /build/my-source/build/libs/*.jar build/app.jar

CMD ["jre-custom/bin/java","-jar","build/app.jar"] 
  
EXPOSE 3009

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:45:29