macOS 上 Docker 容器中的 RHEL 9:在容器内运行时订阅管理器被禁用

macOS 上 Docker 容器中的 RHEL 9:在容器内运行时订阅管理器被禁用

我尝试通过 Docker 映像使用 RHEL 9 redhat/ubi9,并拥有 Redhat 个人开发者订阅。但是,在尝试使用时subscription-manager,收到此错误消息:subscription-manager is disabled when running inside a container. Please refer to your host system for subscription management.。我应该在 macOS 级别配置某些内容,还是在容器本身中进行配置?

对于 RHEL 8 图像(redhat/ubi8),一切运行良好。

答案1

你所需要的只是一个return False来自in_container(),见https://github.com/candlepin/subscription-manager/blob/subscription-manager-1.28.32-1/src/rhsm/config.py#L105-L114

FROM registry.access.redhat.com/ubi7/ubi

ARG REDHAT_USERNAME
ARG REDHAT_PASSWORD

RUN sed -i 's/\(def in_container():\)/\1\n    return False/g' /usr/lib64/python*/*-packages/rhsm/config.py
RUN subscription-manager register --username $REDHAT_USERNAME --password $REDHAT_PASSWORD --auto-attach
RUN yum update -y
RUN subscription-manager unregister
FROM registry.access.redhat.com/ubi8/ubi

ARG REDHAT_USERNAME
ARG REDHAT_PASSWORD

RUN sed -i 's/\(def in_container():\)/\1\n    return False/g' /usr/lib64/python*/*-packages/rhsm/config.py
RUN subscription-manager register --username $REDHAT_USERNAME --password $REDHAT_PASSWORD --auto-attach
RUN yum update -y
RUN subscription-manager unregister
FROM registry.access.redhat.com/ubi9/ubi

ARG REDHAT_USERNAME
ARG REDHAT_PASSWORD

RUN sed -i 's/\(def in_container():\)/\1\n    return False/g' /usr/lib64/python*/*-packages/rhsm/config.py
RUN subscription-manager register --username $REDHAT_USERNAME --password $REDHAT_PASSWORD --auto-attach
RUN yum update -y
RUN subscription-manager unregister

答案2

对于 RHEL 8 映像(redhat/ubi8),一切运行良好。

看起来 redhat 也更新了 ubi8,同样的问题也出现了8.7-9298.6-990运行正常,目前降级到那个是一个可能的解决方法。

不幸的是,Redhat 改变了订阅管理器在容器中的工作方式: 请参阅有关在 ubi 容器内运行 ci/cd 的官方文档

Redhat 论坛上讨论此更改的帖子:

有人提到 ENV SMDEV_CONTAINER_OFF=1 在 dockerfile 中使用可能的解决方法。这对 ubi8 不起作用,也许您可​​以尝试 ubi9 并看看它是否修复了它。不幸的是,这也只是一种解决方法……据我所知,唯一真正的解决方法是在已注册的 RHEL 机器上运行容器(因为容器现在从主机获取订阅信息)。

这确实很可惜,redhat 基本上通过这一举动毁掉了 ubi 图像...将容器绑定到特定的主机操作系统似乎是一个非常糟糕的主意。

相关内容