我正在使用
mvnw -Pnative
在 GitHub Action 管道中构建二进制文件。运行机器使用最新的 Ubuntu 操作系统,其中 glibc
版本为 2.3x。然而,基本 Quarkus 微图像使用早期版本的 glibc
。当使用 docker run
运行容器映像时,这会导致以下错误。
./application: /lib64/libc.so.6: version `GLIBC_2.32' not found (required by ./application)
./application: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by ./application)
浏览此站点以了解库版本和分布是乏味的。因此,我想知道,您是否可以建议一个替代的微基础映像 - 使用“最近”
glibc
- 在哪里可以运行 Quarkus 二进制文件?
老实说,我无法重现这一点,但是我的主机有较新版本的
glibc
并且我的本机容器映像已成功启动。
ldd --version
ldd (Ubuntu GLIBC 2.35-0ubuntu3.1) 2.35
在容器镜像上(由 Dockerfile.native 构建)
ldd (GNU libc) 2.28
Dockerfile.native
和Dockerfile.native-micro
都基于UBI8,这是E企业Linux的RedH的U通用BaseI图像。 UBI8基于RHEL8,UBI9基于RHEL9。 RHEL9 使用最近的 glibc 2.34
.
Ubi9 最小基础镜像包含所有内容(甚至更多),但它比
micro
版本大一点。
在这种情况下只需使用这个基础图像:
FROM registry.access.redhat.com/ubi9-minimal:9.2
# ...
本指南解释了如何创建自定义基础映像或扩展现有映像。
这个 Dockerfile 应该可以工作:
# -- Stage ubi
FROM registry.access.redhat.com/ubi9-minimal:9.2 AS ubi
# -- Stage scratch
FROM registry.access.redhat.com/ubi9-micro:9.2 AS scratch
# -- Final Stage
FROM scratch
COPY --from=ubi /usr/lib64/libgcc_s.so.1 /usr/lib64/libgcc_s.so.1
COPY --from=ubi /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6
COPY --from=ubi /usr/lib64/libz.so.1 /usr/lib64/libz.so.1
注意:我克隆了 quarkus-images 存储库并更改了参数以生成此 Dockerfile。