原因:
原因:
大多数 Linux 软件都与 glibc 相连接,GNU libc 库(libc 提供标准的 c 库和 POSIX API)。
大多数 Linux 发行版都基于 glibc。
Alpine Linux 基于 musl libc 库,这是一个最小的实现,并且严格遵循 POSIX。
例如,基于 glibc 发行版构建的可执行文件依赖于/lib/x86 _ 64-linux-gnu/libc.so. 6,而 Alpine 上不能使用这些文件(除非静态链接)。
解决方法:
方法1,安装 libc6兼容包: apk add libc6-compat。这个包装提供了一个轻量级的 glibc 兼容层。对于简单的应用程序,这就足够了。
方法2,在 Alpine 上安装适当的 glibc,提供所有 glibc 方法和功能。Alpine 可以使用 glibc 构建,它应该安装在以下程序中(例如) :
# Source: https://github.com/anapsix/docker-alpine-java
ENV GLIBC_REPO=https://github.com/sgerrand/alpine-pkg-glibc
ENV GLIBC_VERSION=2.30-r0
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
方法3,使用静态链接的可执行文件。静态可执行文件不带动态依赖项,可以在任何 Linux 上运行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。