Thi*_*ago 12 java docker alpine
我正在尝试使用 openjdk 11 构建一个 alpine docker 映像。为此,我正在启动一个 alpine 容器:
docker run -it alpine:3.9 /bin/sh
Run Code Online (Sandbox Code Playgroud)
并运行以下命令:
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;
Run Code Online (Sandbox Code Playgroud)
在那之后,我可以确认一些事情似乎是正确的:
/ # 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
Run Code Online (Sandbox Code Playgroud)
但是当我java自己运行时,我得到:
/ # java -version
+ java -version
/bin/sh: java: not found
Run Code Online (Sandbox Code Playgroud)
我被踢出了容器。我错过了什么吗?
val*_*ano 26
您得到的原因java: not found可能是由于动态链接失败。您可以使用ldd java.
与大多数其他使用glibc(GNU 的 C 库)的Linux 不同,Alpine Linux 使用musl-libc来实现其 libc(标准 C 库)。因此,在非 Alpine 发行版上构建的标准 Linux 软件通常会链接到 glibc,并且无法在 Alpine 上运行,除非安装 glibc 兼容层。所以你需要一个 OpenJDK 11 Alpine 构建,特别是。
然而,不幸的是,这种构建目前不可用。在OpenJDK的第11页中指出:
从 JDK 11 GA 开始,此页面上先前提供的 Alpine Linux 版本已被删除。它不是生产就绪的,因为它没有经过足够彻底的测试,无法被视为 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25948 次 |
| 最近记录: |