Docker Alpine + Oracle Java:找不到Java

Docker alpine + oracle java: cannot find java

我一直在尝试使用Oracle Java(而非openjdk)创建基于高山的docker映像。 我被特别要求在这里创建我们自己的图像。

这是我想出的Dockerfile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FROM alpine:3.6

RUN apk add --no-cache curl wget

RUN mkdir /opt/ && \
    wget -c --header"Cookie: oraclelicense=accept-securebackup-cookie"\
    http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz && \
    tar xvf jdk-8u131-linux-x64.tar.gz -C /opt/ && \
    rm jdk-8u131-linux-x64.tar.gz && \
    ln -s /opt/jdk1.8.0_131 /opt/jdk

ENV JAVA_HOME /opt/jdk
ENV PATH $PATH:/opt/jdk/bin

RUN echo $JAVA_HOME && \
    echo $PATH

RUN which java
RUN java -version

添加了一些不必要的命令(例如,回显JAVA_HOME dir)以帮助调试,但现在我陷入了困境:RUN which java按预期返回/opt/jdk/bin/java,但RUN java -version返回/bin/sh: java: not found

我尝试了几件事,包括将可执行文件符号链接到/ usr / bin,但无济于事。

我想念什么?

编辑:
泊坞窗的最终输出是:
The command '/bin/sh -c java -version' returned a non-zero code: 127

最终编辑:

感谢diginoise将我介绍给MUSL vs libc。 我发现将以下内容添加到我的Dockerfile中使我可以构建工作映像:

1
2
3
4
RUN apk --no-cache add ca-certificates && \
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.25-r0/glibc-2.25-r0.apk && \
apk add glibc-2.25-r0.apk

发现于:https://github.com/sgerrand/alpine-pkg-glibc


您无法实现自己想要的。

Alpine Linux使用MUSL作为标准C库。

Oracle的Java for Linux依赖于GNU Standard C库(gclib)。

有理论上的方法,但是没有您想的那么简单。

看到这个链接

您可以在此处和此处找到运行OracleJDK的Alpine映像的示例。 这两个示例都添加了缺少的GNU C库。

这是Oracle关于该主题的更多详细信息和官方立场。

the JDK source code has not yet been ported to Alpine Linux, or more specifically, the musl C library. That is, it turns out that the thing about Alpine Linux that sticks out/is different from a JDK source code perspective is the C library.

简而言之,使用官方Oracle Java Docker映像