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

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:
  1. 进入容器:docker exec -it <你的GitLab容器ID或名称> bash
  2. 编辑/etc/gitlab/gitlab.rb,找到gitlab_rails['gitlab_shell_ssh_port']这一行,取消注释并设置为3000:
    gitlab_rails['gitlab_shell_ssh_port'] = 3000
    
  3. 让配置生效: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:15:42