如何在Tekton Pipeline的dind容器中安装缺失软件包?
在UBI8容器中安装lsscsi、nvme-cli、nfs-utils的解决方案
核心问题分析
UBI8的默认仓库集合和RHEL8主机不完全一致,部分工具包需要启用特定的UBI附加仓库,同时需确保订阅权限覆盖这些仓库。
具体解决步骤
1. 启用完整的UBI仓库集合
在Dockerfile中注册订阅后,显式启用以下必要仓库(包含你遗漏的ubi-8-extras-rpms):
FROM registry.access.redhat.com/ubi8/ubi-init # 注册Red Hat订阅(替换为你的合法凭证) RUN subscription-manager register --username=YOUR_USERNAME --password=YOUR_PASSWORD --auto-attach # 启用UBI核心及附加仓库 RUN subscription-manager repos --enable=ubi-8-baseos-rpms \ --enable=ubi-8-appstream-rpms \ --enable=codeready-builder-for-rhel-8-x86_64-rpms \ --enable=ubi-8-extras-rpms # 清理缓存、更新索引并安装目标包 RUN yum clean all && yum makecache fast && yum install -y lsscsi nvme-cli nfs-utils # 可选:注销订阅以减小镜像体积 RUN subscription-manager unregister && subscription-manager clean
2. 验证订阅权限
确认你的Red Hat订阅包含对codeready-builder-for-rhel-8-x86_64-rpms和ubi-8-extras-rpms仓库的访问权限——部分基础订阅可能不覆盖这些附加仓库,需要升级订阅或联系Red Hat调整权限。
3. 无订阅场景的替代方案
如果无法使用Red Hat订阅,可通过EPEL仓库补充获取部分工具:
FROM registry.access.redhat.com/ubi8/ubi-init # 安装EPEL仓库(UBI8兼容) RUN yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm # 安装可从EPEL获取的工具,nvme-cli若无订阅则无法从UBI源获取,需寻找第三方兼容包 RUN yum install -y lsscsi nfs-utils
注:nvme-cli在无订阅情况下无法通过官方UBI源获取,需自行寻找兼容的第三方RPM包或镜像。
4. 排查dind容器网络问题
确保Tekton的dind容器能正常访问Red Hat仓库地址(cdn.redhat.com等),检查是否存在网络策略、防火墙或代理拦截仓库请求。可在Dockerfile中加入curl -I https://cdn.redhat.com验证网络连通性。
5. 验证仓库状态
在构建过程中加入yum repolist enabled命令,查看已启用的仓库列表,确认目标仓库已被正确启用且状态正常。
关键遗漏点说明
你之前可能未启用ubi-8-extras-rpms仓库,同时需确认codeready-builder-for-rhel-8-x86_64-rpms仓库的订阅权限是否生效——RHEL主机上的订阅权限可能自动覆盖这些仓库,但容器内需要显式配置并验证权限。
内容的提问来源于stack exchange,提问作者DevOps__1903
相关产品推荐
相关产品推荐

