Docker中Gitea与Jenkins部署:Pipeline配置的SSH连接问题
Jenkins无法连接Docker部署的Gitea?看这几个关键点
哦,这个问题我碰到过好几次了——核心问题出在Docker容器的网络隔离上,你在Jenkins容器里写的localhost:3001,指向的是Jenkins容器自己的localhost,不是你的宿主机,自然连不上Gitea的SSH服务。下面给你两种靠谱的解决方案,按场景选就行:
方案1:用宿主机的Docker网关IP代替localhost
这是最快的临时解决办法,适合快速验证:
- 先找到宿主机在Docker桥接网络中的网关IP,执行命令:
一般会输出类似docker inspect bridge | grep Gateway"Gateway": "172.17.0.1"这样的结果,这个IP就是Jenkins容器能访问到宿主机的地址。 - 把Jenkins里的仓库SSH地址改成:
(替换成你刚才查到的实际网关IP)git@172.17.0.1:3001/repo/project.git
方案2:把两个容器放到同一个自定义Docker网络(推荐生产/长期使用)
Docker的默认桥接网络在容器名称解析上有局限,自定义网络能让容器直接通过名称互相访问,更稳定:
- 创建一个自定义网络:
docker network create ci-network - 重新启动Gitea容器,加入这个自定义网络(记得保留你原来的端口映射和数据卷配置):
docker run --name gitea --network ci-network -p 3000:3000 -p 3001:22 gitea/gitea:latest - 同样重新启动Jenkins容器,加入同一个网络:
docker run --name jenkins --network ci-network -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts - 这时候在Jenkins里直接用Gitea的容器名作为主机名,仓库地址改成:
(因为同一个自定义网络里,容器可以通过名称解析IP,而且直接访问Gitea内部的22端口,不用再用宿主机映射的3001了)git@gitea:22/repo/project.git
额外必查验证步骤
别光改地址,这几个点也容易踩坑:
- 测试容器内连通性:进入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
相关产品推荐
相关产品推荐

