在 alpine:3.9 上安装 openjdk 11

在 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

然后我就被踢出了容器。我是不是错过了什么?

答案1

您收到的原因java: not found可能是由于动态链接失败。您可以使用 进行验证ldd java

Alpine Linux 正在使用musl-libc用于其 libc(标准 C 库)实现,与大多数使用其他 Linux 不同glibc,GNU 的 C 库。因此,在非 Alpine 发行版上构建的标准 Linux 软件通常会与 glibc 链接,如果不安装 glibc 兼容层,则无法在 Alpine 上运行。因此,您需要一个 OpenJDK 11 Alpine 版本。

但不幸的是,这种构建目前尚未实现。OpenJDK 11 页面状态:

本页上之前提供的 Alpine Linux 版本已从 JDK 11 GA 中删除。它尚未投入生产,因为它尚未经过充分的测试,因此不能被视为 GA 版本。

替代方案包括:

  • 在 Alpine 容器上安装正确的 glibc。这是一个相当简单的过程,它将允许您在 Alpine 上运行任何 Linux 软件。但是,您将不再运行“原生 Alpine”。对于安装程序,因此邮政

  • 从 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

答案2

Openjdk11 适用于 alpine 版本 3.11。安装方法:

  1. 更新版本:vim /etc/apk/repositories

     bash-4.4# cat /etc/apk/repositories 
     http://dl-cdn.alpinelinux.org/alpine/v3.11/main
     http://dl-cdn.alpinelinux.org/alpine/v3.11/community
    
  2. 升级:apk升级

  3. 获取:apk add --no-cache openjdk11

     bash-4.4# java -version
     openjdk version "11.0.5" 2019-10-15
     OpenJDK Runtime Environment (build 11.0.5+10-alpine-r0)
     OpenJDK 64-Bit Server VM (build 11.0.5+10-alpine-r0, mixed mode)
    

相关内容