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

Docker中Gitea与Jenkins部署:Pipeline配置的SSH连接问题

Jenkins无法连接Docker部署的Gitea?看这几个关键点

哦,这个问题我碰到过好几次了——核心问题出在Docker容器的网络隔离上,你在Jenkins容器里写的localhost:3001,指向的是Jenkins容器自己的localhost,不是你的宿主机,自然连不上Gitea的SSH服务。下面给你两种靠谱的解决方案,按场景选就行:

方案1:用宿主机的Docker网关IP代替localhost

这是最快的临时解决办法,适合快速验证:

  1. 先找到宿主机在Docker桥接网络中的网关IP,执行命令:
    docker inspect bridge | grep Gateway
    
    一般会输出类似"Gateway": "172.17.0.1"这样的结果,这个IP就是Jenkins容器能访问到宿主机的地址。
  2. 把Jenkins里的仓库SSH地址改成:
    git@172.17.0.1:3001/repo/project.git
    
    (替换成你刚才查到的实际网关IP)

方案2:把两个容器放到同一个自定义Docker网络(推荐生产/长期使用)

Docker的默认桥接网络在容器名称解析上有局限,自定义网络能让容器直接通过名称互相访问,更稳定:

  1. 创建一个自定义网络:
    docker network create ci-network
    
  2. 重新启动Gitea容器,加入这个自定义网络(记得保留你原来的端口映射和数据卷配置):
    docker run --name gitea --network ci-network -p 3000:3000 -p 3001:22 gitea/gitea:latest
    
  3. 同样重新启动Jenkins容器,加入同一个网络:
    docker run --name jenkins --network ci-network -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
    
  4. 这时候在Jenkins里直接用Gitea的容器名作为主机名,仓库地址改成:
    git@gitea:22/repo/project.git
    
    (因为同一个自定义网络里,容器可以通过名称解析IP,而且直接访问Gitea内部的22端口,不用再用宿主机映射的3001了)

额外必查验证步骤

别光改地址,这几个点也容易踩坑:

  • 测试容器内连通性:进入Jenkins容器执行docker exec -it jenkins bash,然后用ssh -T git@<你的宿主机网关IP> -p 3001(方案1)或ssh -T git@gitea -p 22(方案2)测试,能看到Gitea的欢迎消息才说明网络通了。
  • SSH密钥配置:Jenkins使用的SSH私钥对应的公钥,必须已经添加到Gitea对应的用户账户的SSH设置里,否则会出现权限拒绝错误——这是最容易被忽略的点!
  • Gitea SSH服务状态:进入Gitea容器执行docker exec -it gitea bash,然后用netstat -tulpn | grep 22确认22端口确实在监听。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:14:48