Docker部署GitLab后SSH可连接但git clone失败求助
问题排查:Docker部署GitLab后SSH克隆失败但SSH测试连接成功
问题概述
- 执行
git clone ssh://git@serverIP:5022/sungjinseo/test.git时,报错:ssh: connect to host serverIP port 5022: Connection refused - 但执行
ssh -T git@serverIP -p 5022可成功连接,显示Welcome to GitLab, @sungjinseo! - 无法使用HTTP方式克隆,仅能通过IP访问GitLab页面(路由器限制服务器可用端口范围为5000-6000)
- 服务器防火墙已关闭,提供了部署用的YAML文件截图
排查与解决步骤
1. 核对Docker端口映射配置
Docker部署GitLab时,容器内部默认SSH端口为22,需确保YAML中主机5022端口已正确映射到容器22端口:
- 检查YAML的
ports段,确认存在:ports: - "5022:22" - 若映射错误(如写成
5022:5022),会导致GitLab内部SSH服务未监听对应端口,修正后重启容器:docker-compose restart
2. 配置GitLab对外暴露的SSH端口
GitLab需要知晓对外公开的SSH端口,否则内部转发或地址生成会异常:
- 进入GitLab容器:
docker exec -it <你的GitLab容器名> /bin/bash - 编辑配置文件
/etc/gitlab/gitlab.rb,添加或修改:gitlab_rails['gitlab_shell_ssh_port'] = 5022 - 重新配置GitLab:
gitlab-ctl reconfigure - 重启服务:
gitlab-ctl restart
3. 验证容器内SSH服务状态
确认容器内SSH服务正常运行:
- 进入容器后执行:
gitlab-ctl status sshd - 若状态不为
run,启动服务:gitlab-ctl start sshd
4. 核对仓库的SSH克隆地址
登录GitLab网页,进入sungjinseo/test仓库,查看页面显示的SSH克隆地址,确认端口为5022。若显示默认22端口,说明GitLab未正确识别对外端口,回到步骤2重新配置。
5. 开启SSH调试定位细节
执行克隆时开启SSH verbose模式,获取详细错误日志:
GIT_SSH_COMMAND="ssh -v" git clone ssh://git@serverIP:5022/sungjinseo/test.git
从日志中可精准定位是连接阶段问题,还是认证后的仓库权限问题。
内容的提问来源于stack exchange,提问作者sungjin seo
相关产品推荐
相关产品推荐

