原生微 Quarkus 基础镜像的替代品

问题描述 投票:0回答:1

我正在使用

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 二进制文件?

java binary containers quarkus glibc
1个回答
0
投票

老实说,我无法重现这一点,但是我的主机有较新版本的

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的RedHU通用BaseI图像。 UBI8基于RHEL8,UBI9基于RHEL9。 RHEL9 使用最近的
glibc 2.34
.

解决方案 #1 - 使用 UBI9-minimal

Ubi9 最小基础镜像包含所有内容(甚至更多),但它比

micro
版本大一点。

在这种情况下只需使用这个基础图像:

FROM registry.access.redhat.com/ubi9-minimal:9.2

# ...

解决方案#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。

© www.soinside.com 2019 - 2024. All rights reserved.