Jenkins机器能否在Pipeline脚本中与Docker机器实现通信?
可行性判定
该需求完全可实现。你已经验证过Jenkins机器可以正常访问第一阶段创建的Linux宿主,只要补充Docker远程访问的相关配置即可完成通信。
对应实现步骤
- 第一阶段「build docker」配置
- 启动Docker服务后,修改Docker daemon配置,开放远程访问端口:测试环境可使用2375非加密端口,生产环境必须使用2376端口并配置TLS证书,避免未授权访问风险
- 放行宿主防火墙的对应端口,规则限定仅允许Jenkins机器的IP访问该端口
- 阶段结束后将Docker宿主的IP存入Jenkins流水线全局变量,供第二阶段调用
- 第二阶段Jenkins侧配置
- 提前在Jenkins机器上安装对应版本的Docker客户端
- 执行命令前配置环境变量:
export DOCKER_HOST=tcp://<第一阶段Docker宿主IP>:<对应端口>,如果是TLS加密访问还要额外配置DOCKER_TLS_VERIFY=1和证书存放路径 - 执行
docker info验证连接,返回正常信息即可进行后续的镜像构建、容器操作等需求
Docker场景下更通用的流水线方案
如果不需要跨机器调度,还有两种维护成本更低的常用方案可选:
- 直接在Jenkins的agent节点预装Docker环境,所有构建、镜像打包、部署操作都在同一个agent节点完成,不需要跨阶段切换机器,流水线配置逻辑更简单
- 使用Jenkins官方Docker插件,在流水线中直接声明需要的容器作为执行环境,插件会自动完成容器的创建、挂载、销毁全生命周期管理,不需要你手动维护Docker机器的调度
安全提示
- 禁止在公网环境开放Docker 2375非加密端口,该端口无任何验证机制,极易被恶意扫描入侵
- 如果Docker机器仅在流水线运行期间使用,建议新增最后一个清理阶段,执行完所有操作后销毁对应资源,避免不必要的成本浪费
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

