Docker alpine + oracle java: cannot find java

phanteh :

I've been trying to create an alpine-based docker image with Oracle Java (rather than openjdk). I have been specifically asked to create our own image here.

This is the Dockerfile I've come up with:

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

There are some unnecessary commands (like echoing the JAVA_HOME dir) which were added to help with debugging, but now I'm stuck: RUN which java returns /opt/jdk/bin/java as expected, but RUN java -version returns /bin/sh: java: not found.

I've tried a few things, including symlinking the executable(s) into /usr/bin, to no avail.

What am I missing?

EDIT: Final output from docker is: The command '/bin/sh -c java -version' returned a non-zero code: 127

Final edit:

Thanks to diginoise for putting me on to MUSL vs libc. I found adding the following to my Dockerfile allowed me to build a working image:

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

Found at: https://github.com/sgerrand/alpine-pkg-glibc

diginoise :

You cannot achieve what you want.

Alpine Linux uses MUSL as a Standard C library.

Oracle's Java for linux depends on GNU Standard C library (gclib).

There is theoretical way, but it is not as trivial as you think.

See this link

You can find examples of Alpine images running with OracleJDK here and here. Both examples are adding the missing GNU C library.

Here is a bit more detailed info and official stance from Oracle on the topic

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.

In short use official Oracle Java Docker image

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=436829&siteId=1