web-dev-qa-db-ja.com

Docker Alpine + Oracle Java:見つかりませんjava

私は、Oracle Java(openjdkではなく)を使用して、アルパインベースのDockerイメージを作成しようとしています。特に、ここで独自のイメージを作成するように依頼されました。

これは私が思いついたDockerfileです:

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にシンボリックリンクするなど、いくつかのことを試みましたが、役に立ちませんでした。

何が欠けていますか?

編集:dockerからの最終的な出力は:The command '/bin/sh -c Java -version' returned a non-zero code: 127

最終編集:

MUSLとlibcを紹介してくれたdiginoiseに感謝します。 Dockerfileに以下を追加すると、作業イメージを構築できることがわかりました。

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

11
phanteh

あなたが望むものを達成することはできません。

Alpine Linuxは、MUSLを標準Cライブラリとして使用します。

OracleのJavaは、GNU標準Cライブラリ(gclib)に依存します。

理論的な方法はありますが、思ったほど簡単ではありません。

参照 このリンク

OracleJDK here および here で実行されているAlpineイメージの例を見つけることができます。どちらの例でも、不足しているGNU Cライブラリを追加しています。

このトピックに関するOracleのもう少し詳細な情報と公式のスタンスを示します

jDKソースコードはまだAlpine Linux、より具体的にはmusl Cライブラリに移植されていません。つまり、Alpine Linuxについて、JDKソースコードの観点から突出している/異なるのはCライブラリであることが判明しました。

要するに公式のOracleを使用Java Docker image

13
diginoise