在缺少yum的Red Hat映像中安装OpenSSL

56次阅读
没有评论

问题描述

在一个运行着镜像quay.io/keycloak/keycloak:21.1.1的容器中,通过cat /etc/os-release命令得知其操作系统信息如下(摘录):

NAME="Red Hat Enterprise Linux"
VERSION="9.1 (Plow)"
CPE_NAME="cpe:/o:redhat:enterprise_linux:9::baseos"

在这个容器中,没有安装opensslyum,尝试执行yum install openssl命令会显示”command not found”。用户想知道在这种镜像中如何安装OpenSSL(也许这是一个UBI微映像)。

解决方案

请注意以下操作可能涉及版本差异或风险,务必谨慎操作。

最佳解决方案

该Keycloak镜像quay.io/keycloak/keycloak:21.1.1目前基于Red Hat Universal Base Image(UBI)ubi9-micro,这个映像中没有安装任何包管理器(如dnfrpmyum),以减小映像大小。

在没有包管理器的情况下,仍然有一些技巧可以安装软件包,其中一种涉及到使用buildah mount命令,另一种涉及到使用多阶段构建和yum install --installroot /mnt/rootfs命令。在这里,我将重点介绍第二种方法,因为它适用于您的情况。

以下是使用多阶段构建来安装OpenSSL的步骤:
1. 创建一个Dockerfile,以构建您自己的定制镜像。以下是一个示例的Dockerfile:

# 第一阶段:使用ubi9-micro作为基础映像
FROM registry.access.redhat.com/ubi9/ubi-minimal AS builder

# 安装OpenSSL到临时目录
RUN microdnf install -y openssl && \
    mkdir /openssl && \
    cp -r /usr/lib64/openssl /openssl

# 第二阶段:使用ubi9-micro作为基础映像
FROM registry.access.redhat.com/ubi9/ubi-minimal

# 从第一阶段复制安装好的OpenSSL
COPY --from=builder /openssl /usr/lib64/openssl

# 设置工作目录等其他配置
WORKDIR /app

# 在此继续添加您的应用配置和命令
  1. 执行以下命令来构建您的定制镜像:
docker build -t custom_keycloak:1.0 .
  1. 使用您的定制镜像运行容器:
docker run -d --name keycloak_with_openssl custom_keycloak:1.0

通过以上步骤,您将创建一个新的定制镜像,其中包含了安装好的OpenSSL。

请注意,这个解决方案在多阶段构建中分成两个阶段。第一阶段用于安装OpenSSL并将其复制到临时目录。第二阶段则将第一阶段安装好的OpenSSL复制到正式的ubi9-micro映像中,从而实现在没有yum的情况下安装OpenSSL的目标。

重要提示: 在操作过程中,务必注意版本差异和风险,确保备份重要数据。如果涉及到生产环境,请谨慎测试以确保一切正常。

正文完