我的目标是使Alpine能够执行不受音乐支持的JRE。这样做的动机是缩小图像大小,我在压缩JRE本身上取得了一定的进展,但是发现的最小图像是50M的ARM64v8 / debian:slim-9。很好,但是还不够。 我没有发现支持musl的ARM64的JRE最高可达9。因此可能的方向是
这是我的步骤:
我在真正的ARM64硬件上进行的所有实验。
基于以下git项目 https://github.com/owlab-exp/alpine-pkg-glibc-arm64
apk --no-cache添加ca证书
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.23-r3/glibc-2.23-r3.apk
apk add --allow-untrusted glibc-2.23-r3.apk
使用jlink工具将带有缩小模块列表的OpenJRE 10文件夹复制到Apline图像中。
不幸的是,当我尝试运行./java --version时,我得到了
/bin/sh: ./java: not found
我看到已在以下文件夹中安装了glibc apk
/usr/glibc-compat/lib
任何我想念的想法都会受到赞赏。
答案 0 :(得分:0)
似乎ldconfig
是缺少的部分。运行ldconfig
将更新动态链接器的搜索路径,因此可以找到已安装的glibc二进制文件。
用于运行glibc的ldconfig
并指向已安装的glibc:
/usr/glibc-compat/sbin/ldconfig /lib /usr/glibc-compat/lib
但是,您已经提到lib
下只有etc
和/usr/glibc-compat
文件夹。
glibc二进制文件位于另一个APK中,因此您需要获取并安装:glibc-bin-2.23-r3.apk
。
将所有内容放在一起,我已经成功使用以下(X86)Dockerfile运行glibc Java:
# Based on stripped down Docker file from:
# https://github.com/anapsix/docker-alpine-java
FROM alpine:3.8
ENV GLIBC_REPO=https://github.com/sgerrand/alpine-pkg-glibc
ENV GLIBC_VERSION=2.28-r0
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8
# do all in one step
RUN set -ex && \
apk --update add libstdc++ curl ca-certificates && \
for pkg in glibc-${GLIBC_VERSION} glibc-bin-${GLIBC_VERSION}; \
do curl -sSL ${GLIBC_REPO}/releases/download/${GLIBC_VERSION}/${pkg}.apk -o /tmp/${pkg}.apk; done && \
apk add --allow-untrusted /tmp/*.apk && \
rm -v /tmp/*.apk && \
/usr/glibc-compat/sbin/ldconfig /lib /usr/glibc-compat/lib