我尝试通过 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-929
。
8.6-990
运行正常,目前降级到那个是一个可能的解决方法。
不幸的是,Redhat 改变了订阅管理器在容器中的工作方式: 请参阅有关在 ubi 容器内运行 ci/cd 的官方文档
有人提到
ENV SMDEV_CONTAINER_OFF=1
在 dockerfile 中使用可能的解决方法。这对 ubi8 不起作用,也许您可以尝试 ubi9 并看看它是否修复了它。不幸的是,这也只是一种解决方法……据我所知,唯一真正的解决方法是在已注册的 RHEL 机器上运行容器(因为容器现在从主机获取订阅信息)。
这确实很可惜,redhat 基本上通过这一举动毁掉了 ubi 图像...将容器绑定到特定的主机操作系统似乎是一个非常糟糕的主意。