Установка openjdk 11 на alpine: 3.9

Я пытаюсь создать образ докера alpine с помощью openjdk 11. Для этого я запускаю контейнер 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

И меня выкидывают из контейнера. Я что-то упустил?

4
задан 30 March 2019 в 20:36
1 ответ

Причина, по которой вы получаете java: не найдено , вероятно, из-за сбоя динамического связывания. Вы можете проверить это с помощью ldd java .

Alpine Linux использует musl-libc для своей реализации libc (стандартная библиотека C), в отличие от большинства других Linux, использующих glibc , библиотека C GNU. Как следствие, стандартное программное обеспечение Linux, построенное на дистрибутивах, отличных от Alpine, обычно связано с glibc и не может быть запущено на Alpine без установки уровня совместимости с glibc. В частности, вам понадобится сборка OpenJDK 11 Alpine.

Однако, к сожалению, такая сборка в настоящее время недоступна. На странице OpenJDK 11 указано:

Сборка Alpine Linux, ранее доступная на этой странице, была удалена с версии JDK 11 GA. Он не готов к производству, потому что не был достаточно тщательно протестирован, чтобы считаться сборкой GA.

Альтернативы:

  • Установка надлежащего glibc в контейнер Alpine. Это довольно простая процедура, которая позволит вам запускать любое программное обеспечение Linux на Alpine. Однако вы больше не будете запускать «родной Alpine». Для процедуры установки см. Это сообщение .

  • Установка неофициального OpenJDK 11 Alpine от поставщика OpenJDK. В частности, Zulu OpenJDK - очень хорошая альтернатива, предлагающая тщательно протестированные и проверенные сборки, которые также являются бесплатными и с открытым исходным кодом.

Дополнительная информация доступна в этом сообщении StackOverflow:
Почему базовый образ Docker Java 11 так большой? (openjdk: 11-jre-slim)

Обновление:

По состоянию на 06.02.19 пакет openjdk11 доступен в репозиториях Alpine! Его можно взять из репозитория edge / community с помощью:

apk --no-cache add openjdk11 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community
9
ответ дан 3 December 2019 в 02:42

Теги

Похожие вопросы