![macOS 上 Docker 容器中的 RHEL 9:在容器内运行时订阅管理器被禁用](https://linux22.com/image/779107/macOS%20%E4%B8%8A%20Docker%20%E5%AE%B9%E5%99%A8%E4%B8%AD%E7%9A%84%20RHEL%209%EF%BC%9A%E5%9C%A8%E5%AE%B9%E5%99%A8%E5%86%85%E8%BF%90%E8%A1%8C%E6%97%B6%E8%AE%A2%E9%98%85%E7%AE%A1%E7%90%86%E5%99%A8%E8%A2%AB%E7%A6%81%E7%94%A8.png)
我尝试通过 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 图像...将容器绑定到特定的主机操作系统似乎是一个非常糟糕的主意。