web-dev-qa-db-ja.com

Alpine:3.9へのopenjdk 11のインストール

Openjdk 11でAlpine Dockerイメージを構築しようとしています。これを行うには、Alpineコンテナーを開始します。

docker run -it Alpine:3.9 /bin/sh

そして、以下を実行します:

export Java_HOME=/opt/openjdk-11
export PATH=$Java_HOME/bin:$PATH

export Java_VERSION=11.0.2
export Java_URL=https://download.Java.net/Java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
export Java_SHA256=99be79935354f5c0df1ad293620ea36d13f48ec3ea870c838f20c504c9668b57

set -eux; \
    \
    wget -O /openjdk.tgz "$Java_URL"; \
    echo "$Java_SHA256 */openjdk.tgz" | sha256sum -c -; \
    mkdir -p "$Java_HOME"; \
    tar --extract --file /openjdk.tgz --directory "$Java_HOME" --strip-components 1; \
    rm /openjdk.tgz;

その後、いくつかの点が正しいように見えます。

/ # ls -lah $Java_HOME/bin/Java
+ ls -lah /opt/openjdk-11/bin/Java
-rwxr-xr-x    1 668      668         8.5K Jan 18 05:20 /opt/openjdk-11/bin/Java
/ # echo $PATH
+ echo /opt/openjdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/opt/openjdk-11/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
/ # which Java
+ which Java
/opt/openjdk-11/bin/Java

しかし、Java自体を実行すると、次のようになります。

/ # Java -version
+ Java -version
/bin/sh: Java: not found

そして、私はコンテナから追い出されます。何か不足していますか?

5
Thiago

Java: not foundが表示されるのは、ダイナミックリンクの失敗が原因であると考えられます。これはldd Javaを使用して確認できます。

アルパインLinuxは、GNUのCライブラリである glibc を使用している他のほとんどのLinuxとは対照的に、libc(標準Cライブラリ)の実装に musl-libc を使用しています。結果として、Alpine以外のディストリビューションで構築された標準のLinuxソフトウェアは、通常、glibcにリンクされ、glibc互換性レイヤーをインストールしないと、Alpineで実行できません。したがって、特にOpenJDK 11 Alpineビルドが必要になります。

ただし、残念ながらそのようなビルドは現在利用できません。 OpenJDK 11ページ の状態:

以前このページで利用できたAlpine Linuxビルドは、JDK 11 GAから削除されました。 GAビルドと見なされるほど十分にテストされていないため、本番環境に対応していません。

代替案は次のとおりです。

  • Alpineコンテナーに適切なglibcをインストールします。これはかなり簡単な手順で、アルパイン上でLinuxソフトウェアを実行できます。ただし、「ネイティブアルパイン」を実行することはもうありません。インストール手順はこちら 投稿 .

  • OpenJDKベンダーからの非公式OpenJDK 11 Alpineのインストール。具体的には、Zulu OpenJDKは非常に優れた代替手段であり、完全にテストおよび検証されたビルドを提供します。これらのビルドは無料でオープンソースでもあります。

詳細については、このStackOverflowの投稿をご覧ください。
Java 11ベースのDockerイメージが大きすぎるのはなぜですか?(openjdk:11-jre-slim)

更新:

2019年2月6日の時点で、openjdk11パッケージがAlpineリポジトリで利用可能です! Edge/communityリポジトリから次のように取得できます。

apk --no-cache add openjdk11 --repository=http://dl-cdn.alpinelinux.org/Alpine/Edge/community
12
valiano