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

OpenShift集群中dind容器无网络无法构建Docker镜像问题求助

Azure UPI部署OpenShift下Jenkins dind容器网络异常修复方案

修复思路

1. 调整dind默认网段避免地址冲突

dind默认使用172.17.0.0/16作为容器网桥网段,该网段极易与Azure VNet默认网段、OpenShift集群网段/服务网段重叠,导致路由转发异常无法访问公网。
你需要先确认你的Azure VNet、OpenShift集群已使用的网段,选择一个未被占用的私有网段,在dind容器的启动参数中指定自定义网桥地址:

- name: docker-daemon
  image: docker:19.03.1-dind
  securityContext:
    privileged: true
  command: ["dockerd", "--bip=192.168.10.1/24"] # 替换为未被使用的网段
  volumeMounts:
  - name: docker-socket
    mountPath: /var/run

2. 强制指定dind使用OpenShift集群DNS

dind默认会为构建容器配置8.8.8.8作为DNS服务器,Azure环境下通常会限制公网DNS的访问,导致DNS解析失败。你需要修改dind启动参数,指定使用OpenShift集群的CoreDNS地址:

- name: docker-daemon
  image: docker:19.03.1-dind
  securityContext:
    privileged: true
  command: ["dockerd", "--bip=192.168.10.1/24", "--dns=<你的OpenShift CoreDNS服务IP>", "--dns-search=svc.cluster.local", "--dns-search=<你的集群域名>"]
  volumeMounts:
  - name: docker-socket
    mountPath: /var/run

你可以通过在OpenShift任意普通Pod中执行cat /etc/resolv.conf获取集群正确的DNS地址与搜索域配置。

3. 调整dind容器MTU适配Azure网络

Azure VNet默认网卡MTU为1500,若OpenShift SDN使用OVN/Openshift SDN插件,容器网卡MTU通常会降低为1450/1400,dind默认1500的MTU会导致数据包分片丢包,出现连接超时。添加启动参数指定dind容器的MTU:

command: ["dockerd", "--bip=192.168.10.1/24", "--mtu=1400", "--dns=<CoreDNS IP>"]

4. 验证Azure网络出站规则

检查OpenShift工作节点所在子网的Azure NSG出站规则,确保允许以下流量:

  • 到公网0.0.0.0/0的TCP 80/443端口流量
  • 到公网DNS或集群DNS的UDP 53端口流量

验证方法

修改podTemplate配置后,在流水线中添加临时验证步骤确认问题修复:

container('docker') {
  stage('验证网络') {
    // 验证公网连通性
    sh 'docker run --rm alpine ping -c 4 8.8.8.8'
    // 验证DNS解析
    sh 'docker run --rm alpine nslookup archive.ubuntu.com'
    // 验证apt访问
    sh 'docker run --rm ubuntu:bionic apt update'
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:48:03