容器化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守护进程监听该网络地址):
- 查看Docker默认网络:
docker network ls
- 停止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
相关产品推荐
相关产品推荐

