J'essaie de créer une image de docker Alpine avec openjdk 11. Pour ce faire, je démarre un conteneur Alpine:
docker run -it Alpine:3.9 /bin/sh
Et en exécutant ce qui suit:
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;
Après cela, je peux confirmer que certaines choses semblent correctes:
/ # 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
Mais quand je lance Java
lui-même, j'obtiens:
/ # Java -version
+ Java -version
/bin/sh: Java: not found
Et je suis expulsé du conteneur. Suis-je en train de manquer quelque chose?
La raison pour laquelle vous obtenez Java: not found
Est probablement due à un échec de la liaison dynamique. Vous pouvez le vérifier en utilisant ldd Java
.
Alpine Linux utilise musl-libc pour son implémentation libc (bibliothèque C standard), contrairement à la plupart des autres Linux qui utilisent glibc , la bibliothèque C de GNU. Par conséquent, les logiciels Linux standard qui sont construits sur des distributions non alpines, seront généralement liés à glibc et ne peuvent pas être exécutés sur Alpine, sans installer une couche de compatibilité glibc. Vous aurez donc besoin d'une version OpenJDK 11 Alpine, en particulier.
Cependant, malheureusement, une telle version n'est pas disponible actuellement. page OpenJDK 11 indique:
La version Alpine Linux précédemment disponible sur cette page a été supprimée à partir de JDK 11 GA. Il n'est pas prêt pour la production, car il n'a pas été suffisamment testé pour être considéré comme une version GA.
Les alternatives sont:
Installer la glibc appropriée sur le conteneur Alpine. Il s'agit d'une procédure assez simple, qui vous permettra d'exécuter n'importe quel logiciel Linux sur Alpine. Cependant, vous n'utiliserez plus "Alpine native". Pour la procédure d'installation, donc ceci post .
Installation d'OpenJDK 11 Alpine non officiel auprès d'un fournisseur OpenJDK. Plus précisément, Zulu OpenJDK est une très bonne alternative, offrant des versions soigneusement testées et vérifiées, qui sont également libres et open source.
Plus d'informations sont disponibles dans ce post StackOverflow:
Pourquoi l'image Docker de base de Java 11 est-elle si grande? (Openjdk: 11-jre-slim)
Mise à jour:
Depuis le 2/6/19, le package openjdk11
Est disponible dans les dépôts Alpine! Il peut être récupéré dans le référentiel Edge/community
Avec:
apk --no-cache add openjdk11 --repository=http://dl-cdn.alpinelinux.org/Alpine/Edge/community