私は、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
あなたが望むものを達成することはできません。
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