Docker部署GitLab CE后SSH克隆失败(端口3000连接被拒)求助
解决Docker中GitLab CE的SSH克隆端口连接被拒绝问题
你遇到的是Docker部署GitLab后,SSH端口映射或配置未到位导致的连接拒绝问题,我给你一步步排查的解决方案:
- 第一步:确认Docker容器的端口映射是否正确
GitLab容器内部的SSH服务默认监听22端口,你在GitLab后台设置的3000是宿主机的端口,所以启动容器时必须把宿主机的3000端口映射到容器的22端口。检查你的容器启动命令,应该包含类似这样的参数:
docker run ... -p 3000:22 ... gitlab/gitlab-ce:latest
如果之前启动时没加这个映射,先停止容器,重新启动并添加该参数。
- 第二步:配置GitLab的SSH端口参数
进入GitLab容器内部,修改GitLab的核心配置,确保它对外暴露的SSH端口是3000:
- 进入容器:
docker exec -it <你的GitLab容器ID或名称> bash - 编辑
/etc/gitlab/gitlab.rb,找到gitlab_rails['gitlab_shell_ssh_port']这一行,取消注释并设置为3000:gitlab_rails['gitlab_shell_ssh_port'] = 3000 - 让配置生效:
gitlab-ctl reconfigure
这一步很关键,GitLab生成的SSH克隆地址会使用这个端口,同时也会确保容器内的SSH服务正常运行。
第三步:检查宿主机的防火墙/安全组规则
确认宿主机的防火墙(比如ufw、iptables)已经开放3000端口的TCP流量:用ufw的话:
ufw allow 3000/tcp,然后执行ufw reload用iptables的话:
iptables -A INPUT -p tcp --dport 3000 -j ACCEPT
如果是云服务器(比如阿里云、AWS),还要去控制台的安全组里添加规则,允许外部访问3000端口。第四步:测试端口连通性
在执行git clone的机器上,先测试能不能连到目标端口:
nc -zv git.site.com 3000 # 或者用telnet telnet git.site.com 3000
如果显示连接成功,再去执行git clone命令;如果还是连接被拒绝,回到前几步检查端口映射和防火墙配置。
- 第五步:确认SSH密钥配置正确
当端口连通后,如果仍然报错,检查你的本地SSH公钥是否已经添加到GitLab的个人设置中(用户头像→Settings→SSH Keys),确保公钥正确上传,并且本地机器使用对应的私钥进行连接。
按照这些步骤排查,应该能解决你的问题。
内容的提问来源于stack exchange,提问作者Vladislav
相关产品推荐
相关产品推荐

