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

容器化Jenkins Pipeline无法拉取Docker镜像问题求助

Jenkins Pipeline无法拉取Docker镜像:dial tcp: lookup docker: no such host 问题解决

问题成因

你的Jenkins以容器方式运行时,Pipeline的Docker Agent默认会尝试连接docker:2376地址,但Jenkins容器所在的网络环境中不存在名为docker的服务节点,导致DNS解析失败。同时,Jenkins容器默认没有权限访问宿主机的Docker引擎,即使解析了地址也无法正常交互。

解决方案

方案1:修改Jenkins容器启动参数,挂载Docker套接字并配置环境变量

停止当前Jenkins容器,重新启动时添加以下参数,让Jenkins容器直接调用宿主机的Docker引擎:

docker run -d \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /usr/bin/docker:/usr/bin/docker \
  -e DOCKER_HOST=unix:///var/run/docker.sock \
  jenkins/jenkins:lts
  • -v /var/run/docker.sock:/var/run/docker.sock:挂载宿主机Docker套接字,让Jenkins容器直接对接宿主机Docker服务
  • -e DOCKER_HOST=unix:///var/run/docker.sock:指定Docker连接路径,覆盖默认的tcp://docker:2376
  • -v /usr/bin/docker:/usr/bin/docker:可选,若Jenkins容器内无docker命令,挂载宿主机的docker二进制文件

方案2:在Pipeline中显式指定Docker主机地址

无需修改Jenkins启动参数,直接在Pipeline代码里指定Docker主机的访问路径:

pipeline {
    agent {
        docker { 
            image 'node:latest'
            dockerHost 'unix:///var/run/docker.sock' // 若宿主机开启TCP访问,可替换为tcp://<宿主机IP>:2375
            dockerTool 'Default' // 确保Jenkins已配置Docker工具
        }
    }

    stages {
        stage('Prepare'){
            steps{
                sh 'echo "starting"'
            }
        }   
    }   
}

方案3:将Jenkins容器加入Docker默认网络

把Jenkins容器加入Docker的bridge默认网络,使其能通过docker主机名访问Docker守护进程(需确保Docker守护进程监听该网络地址):

  1. 查看Docker默认网络:
docker network ls
  1. 停止Jenkins容器后重新连接到目标网络:
docker network connect bridge <你的Jenkins容器名>

或启动时直接指定网络:

docker run -d \
  --network bridge \
  -p 8080:8080 \
  -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  jenkins/jenkins:lts

注意:此方式需额外配置Docker守护进程允许远程访问,并确保权限正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:15:43