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

Jenkins流水线推送Docker镜像到私有仓库出现No such host错误如何解决

私有Docker Registry推送失败问题解决方案

错误根因

  • no such host报错:执行Jenkins任务的Agent节点无法解析<private-vm-name>对应的IP地址,Docker请求时无法定位到私有Registry所在主机;同时私有Registry默认走HTTP协议,Docker客户端默认优先用HTTPS访问,也会触发访问异常。
  • AccessDeniedException报错:Jenkins服务运行用户(通常为jenkins)没有系统/etc/docker目录的写入权限,且就算写入成功,修改daemon.json后需要重启Docker服务才会生效,在流水线运行阶段动态修改属于无效操作。

解决步骤

  1. 处理主机名解析问题
    二选一即可:
  • 直接用私有Registry所在虚拟机的IP代替<private-vm-name>,绕开域名解析步骤;
  • 在所有执行Jenkins任务的Agent节点的/etc/hosts文件中添加<私有虚拟机IP> <private-vm-name>的映射规则。
  1. 提前配置Docker非安全Registry白名单
    在所有Jenkins Agent节点上手动修改/etc/docker/daemon.json文件,添加私有Registry地址:
{
  "insecure-registries": ["<私有Registry地址,例:192.168.1.100:5000>"]
}

如果节点上已有daemon.json配置,只需将地址追加到已有insecure-registries数组中即可,不要直接覆盖原有配置。修改完成后执行systemctl restart docker重启Docker服务使配置生效。

  1. 修正Jenkinsfile配置
    移除流水线中动态写入daemon.json的逻辑,修改后配置如下:
stage('Building docker image') {
    steps{
        script {
            // registry变量替换为你的实际镜像路径,例:192.168.1.100:5000/temp/prototype-be
            dockerImage = docker.build registry + ":v1"
        }
    }
}

stage('Pushing docker image') {
    steps{
        script {
            // 直接指定HTTP协议的Registry地址,无认证无需额外传凭证参数
            docker.withRegistry( 'http://<你的Registry IP:5000>') {
                dockerImage.push()
            }
        }
    }
}

如果执行时仍有Docker操作权限问题,在Agent节点执行usermod -aG docker jenkins将jenkins用户加入docker用户组,重启Jenkins服务后生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:15:02