Jenkins Multi-configuration项目运行报错问题咨询
问题描述
运行Jenkins Multi-configuration(多配置)项目时返回报错,相关报错截图如下:

已修改云配置项,设置的Docker Host URI为tcp://172.17.0.2:2375。
当前Jenkins容器内的/etc/hosts文件配置内容如下:
127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 1b0ab63069bd
异常原因
报错本质是Jenkins服务无法通过配置的地址连通Docker daemon,具体触发原因按出现概率排序:
- 配置的Docker Host URI地址填写错误:从hosts配置可以看到
172.17.0.2是当前Jenkins容器自身的内部IP,不是宿主机Docker服务的监听地址,访问这个地址的2375端口等于请求Jenkins容器自身,自然无法找到Docker服务 - 宿主机Docker默认只监听本地unix socket套接字,没有开启2375 TCP端口的远程访问能力
- 宿主机防火墙规则拦截了Docker网桥网段对2375端口的访问请求
修复步骤
- 修正Docker Host URI配置
宿主机在docker0网桥上的默认网关IP为172.17.0.1,将Jenkins云配置中的Docker Host URI从tcp://172.17.0.2:2375修改为tcp://172.17.0.1:2375。如果是Docker Desktop环境运行的Jenkins容器,直接将URI填为tcp://host.docker.internal:2375即可。 - 确认宿主机Docker开启TCP端口监听
登录运行Docker的宿主机,编辑Docker配置文件/etc/docker/daemon.json,添加如下配置项:
保存后执行{ "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] }systemctl daemon-reload && systemctl restart docker重启Docker服务,执行ss -tulnp | grep 2375确认端口已经处于全局监听状态。 - 连通性验证
进入Jenkins容器内部执行curl http://已配置的DockerURI地址/version,如果能正常返回Docker版本、API版本等JSON信息,说明网络连通正常,重新触发多配置项目构建即可。 - (推荐)高安全等级配置方案
开启无认证的2375 TCP端口会导致任何人都能控制宿主机Docker服务,风险极高。优先使用unix套接字挂载方式连通:启动Jenkins容器时添加挂载参数-v /var/run/docker.sock:/var/run/docker.sock,后续Jenkins云配置中的Docker Host URI直接填写unix:///var/run/docker.sock即可,无需暴露额外端口就能正常和宿主机Docker服务通信。
内容的提问来源于stack exchange,提问作者xmh
相关产品推荐
相关产品推荐

