You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OCP推送镜像至外部仓库前的存储位置及访问端口查询

OCP构建镜像推送至外部Nexus仓库问题排查解答

一、推送动作触发前镜像的存储位置

OCP的镜像构建动作完全在独立的Build Pod中执行,镜像在推送至外部仓库前不会持久化存储到集群固定位置:

  • 构建生成的镜像层临时存储在Build Pod的内部overlay文件系统,同时会在Pod调度到的工作节点上用emptyDir卷做层缓存,提升推送效率
  • 这类临时存储会在Build Pod生命周期结束(构建成功/失败/超时被销毁)后自动清理,不会留存到OCP内部镜像仓库,除非你在BuildConfig的output里额外配置了推送到内部Registry的规则
  • 整个探测仓库、推送镜像的动作都是由这个Build Pod直接发起,不会经过OCP控制平面节点中转,配置网络策略的时候要注意这一点

二、查询Nexus仓库连通端口的实操方法

首先明确默认规则:如果你在镜像地址里没有显式写端口,OCP会按照Docker Registry API的默认规则探测:HTTPS协议默认走443端口,HTTP协议默认走80端口。你当前配置里的镜像地址nexus.compnanyhost/image:latest没有带端口,默认会优先去连443,这也是你现在报ping registry错误的最常见原因。
要精准拿到实际使用的端口,直接按以下步骤操作:

  1. 定位报错构建对应的Build Pod
    在你执行构建的项目下执行命令,找到build开头、对应你本次构建任务的Pod名称:
    oc get pods | grep -E '^build-'
    
  2. 直接在Build Pod内验证连通端口(结果100%准确,因为推送就是这个Pod发起的)
    执行以下命令进入Pod终端:
    oc rsh <上一步查到的Build Pod名称>
    
    进入后用curl命令逐个验证端口:
    • 验证默认HTTPS 443端口:curl -v https://nexus.compnanyhost/v2/,如果返回401未授权、200响应码,说明端口通;如果返回连接超时、连接被拒绝,说明443未放通或者Nexus没在这个端口监听
    • 如果你们Nexus的Docker仓库用了自定义端口(常见的有5000、8081、8082等),直接在地址后加端口测试:curl -v http://nexus.compnanyhost:<自定义端口>/v2/,能正常返回响应的端口就是你需要配置放通的端口
  3. 实时抓包确认连接端口
    如果上述方法还不能确认,可以在Build任务运行时,登录Build Pod调度到的工作节点,执行以下命令查看Build进程的外连目标端口:
    # 先找到Build Pod对应的容器进程ID
    crictl inspect <Build Pod的容器ID> | grep pid
    # 查看该进程的所有外连TCP连接
    ss -tnp | grep <上一步查到的进程ID>
    
    返回结果里的目标端口就是OCP实际尝试连接Nexus的端口。

注意配置网络放通规则时,需要放通所有可调度Build Pod的工作节点到Nexus对应端口的出方向流量,不要只放通控制平面节点,否则Build Pod调度到没放通的节点时还是会推送失败。如果你的Nexus实际监听的是自定义端口,记得把端口写到BuildConfig的output.to.name字段里,格式为nexus.compnanyhost:<端口号>/image:latest,否则OCP永远会默认连接443端口。


内容的提问来源于stack exchange,提问作者Winston

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:42:17