docker – Instalación de openjdk 11 en alpine: 3.9

Pregunta:

Estoy intentando crear una imagen de Docker alpino con openjdk 11. Para hacerlo, estoy iniciando un contenedor alpino:

docker run -it alpine:3.9 /bin/sh

Y ejecutando lo siguiente:

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;

Después de eso, puedo confirmar que algunas cosas parecen correctas:

/ # 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

Pero cuando ejecuto java , obtengo:

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

Y me echan del contenedor. ¿Me estoy perdiendo de algo?

Respuesta:

La razón por la que está obteniendo java: not found probablemente se deba a un error de enlace dinámico. Puede verificar esto usando ldd java .

Alpine Linux está usando musl-libc para su implementación libc (biblioteca C estándar), en contraste con la mayoría de los otros Linux que usan glibc , la biblioteca C de GNU. Como consecuencia, el software estándar de Linux que se basa en distribuciones que no son de Alpine, generalmente se vinculará con glibc y no se puede ejecutar en Alpine sin instalar una capa de compatibilidad con glibc. Por lo tanto, necesitará una compilación OpenJDK 11 Alpine, específicamente.

Sin embargo, desafortunadamente, dicha compilación no está disponible actualmente. La página de OpenJDK 11 dice:

La compilación de Alpine Linux disponible anteriormente en esta página se eliminó a partir de JDK 11 GA. No está listo para producción porque no se ha probado lo suficientemente a fondo como para ser considerado una compilación GA.

Las alternativas son:

  • Instalación de glibc adecuada en el contenedor Alpine. Este es un procedimiento bastante sencillo, que le permitirá ejecutar cualquier software de Linux en Alpine. Sin embargo, ya no ejecutará "Alpine nativo". Para el procedimiento de instalación, esta publicación .

  • Instalación de OpenJDK 11 Alpine no oficial de un proveedor de OpenJDK. Específicamente, Zulu OpenJDK es una muy buena alternativa, que ofrece compilaciones completamente probadas y verificadas, que también son gratuitas y de código abierto.

Hay más información disponible en esta publicación de StackOverflow:
¿Por qué la imagen de Docker base de Java 11 es tan grande? (openjdk: 11-jre-delgado)

Actualizar:

¡A partir del 2/6/19, el paquete openjdk11 está disponible en los repositorios de Alpine! Se puede obtener del repositorio de edge/community con:

apk --no-cache add openjdk11 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Ir arriba