在日常使用 GitLab 时,很多人习惯通过 SSH 协议 而不是 HTTPS 来拉取与推送代码。但是在使用 Docker 部署 GitLab 的过程中,经常遇到 SSH 端口未开放、只能本地访问、客户端无法连接 等问题。本文将从零开始,详细讲解如何在 Docker 中正确开启 GitLab 的 SSH 服务,并通过 SSH 克隆项目。


1. 环境准备

  • 操作系统:Linux (如 CentOS / Ubuntu)

  • 已安装 Docker & Docker Compose

  • GitLab Docker 镜像(例如 gitlab/gitlab-ce:latest


2. 基础部署

编写 docker-compose.yml,启动 GitLab:

version: '3'
services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlabrestart: alwayshostname: 'gitlab.example.com'ports:- "8080:80"    # Web 页面访问- "8443:443"   # HTTPS- "2222:22"    # SSH(宿主机 2222 -> 容器 22)volumes:- ./gitlab/config:/etc/gitlab- ./gitlab/logs:/var/log/gitlab- ./gitlab/data:/var/opt/gitlab

注意:

  • 2222:22 表示将宿主机的 2222 端口 映射到容器的 22 端口

  • 宿主机端口可以自定义,但容器内部 SSH 必须运行在 22 端口

启动容器:

docker-compose up -d

3. 常见问题排查

3.1 发现 GitLab 占用了 127.0.0.1:2222

进入容器检查端口:

docker exec -it gitlab bash netstat -lnt

在 BusyBox 或精简 Linux 环境中,netstat 可能只有 -lnt 选项,没有 -p。结果可能类似:

tcp 0 0 127.0.0.1:2222 0.0.0.0:* LISTEN

此时说明端口只监听在 127.0.0.1,外部无法访问。

3.2 没看到 0.0.0.0:22

如果 netstat 中看不到 22 端口,说明容器内 sshd 没有启动,或者被 GitLab 内部的配置覆盖。


4. 修改 SSH 配置

4.1 修改 GitLab 配置文件

容器内的 GitLab SSH 配置在:

/etc/gitlab/gitlab.rb

找到以下配置(默认为注释状态):


# gitlab_rails['gitlab_shell_ssh_port'] = 22取消注释并修改为宿主机映射的端口(例如 2222):gitlab_rails['gitlab_shell_ssh_port'] = 2222

保存后,重新加载 GitLab 配置:

gitlab-ctl reconfigure

4.2 修改 SSH 服务配置

进入容器,编辑 sshd 配置文件:

/etc/ssh/sshd_config 

确保包含以下内容:

Port 22
ListenAddress 0.0.0.0
PasswordAuthentication no
PubkeyAuthentication yes

注意:如果之前绑定成了 127.0.0.1,请改为 0.0.0.0

修改完成后重启 sshd:

gitlab-ctl restart sshd

5. 验证 SSH 服务

5.1 容器内部检查

netstat -lnt | grep 22

正确的结果应为:

tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 

5.2 宿主机检查

telnet 127.0.0.1 2222 

5.3 客户端访问

从客户端 PC 执行:

ssh -T -p 2222 git@gitlab.example.com 

如果配置正确,应能看到 GitLab 欢迎提示:

Welcome to GitLab, @yourusername! 

6. 使用 SSH 克隆项目

6.1 获取项目的 SSH 地址

在 GitLab Web 页面中:

  1. 打开你想要克隆的项目(例如 flow)。

  2. 点击 CloneSSH

  3. 会看到类似地址:

git@172.16.18.47:flow.git 

注意:因为 GitLab SSH 端口修改为 2222,需要在 git clone 时指定端口。


6.2 方法 A:使用 ~/.ssh/config 配置端口

编辑本地 SSH 配置文件:

vi ~/.ssh/config 

添加:

Host gitlab-local HostName 172.16.18.47 User git Port 2222 

然后直接克隆:

git clone gitlab-local:flow.git 

Git 会自动使用配置里的端口。


6.3 方法 B:临时指定端口

无需修改 ~/.ssh/config,直接使用:

GIT_SSH_COMMAND="ssh -p 2222" git clone git@172.16.18.47:flow.git 

6.4 注意事项

  1. SSH Key 已配置
    确保本地私钥对应 GitLab Web 的 SSH Key,否则会提示权限拒绝。

  2. 端口映射
    如果宿主机端口修改,需要更新 ~/.ssh/configGIT_SSH_COMMAND

  3. 防火墙
    确保宿主机允许外部访问 SSH 端口(例:2222)。


7. 总结

  • GitLab Docker 默认 SSH 可能只监听在容器内 127.0.0.1:2222,外部无法访问。

  • 正确做法:

    1. docker-compose.yml 中映射端口,例如 2222:22

    2. gitlab.rb 配置 gitlab_shell_ssh_port = 2222

    3. 确保 sshd 配置 ListenAddress 0.0.0.0,并重启服务。

  • SSH 克隆项目时可以通过 ~/.ssh/configGIT_SSH_COMMAND 指定端口。

这样,你就可以在 Docker 中完整部署 GitLab,并使用 SSH 拉取和推送项目啦 🚀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94860.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94860.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94860.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C/C++---前缀和(Prefix Sum)

在C算法与数据结构领域,前缀和是一种时间复杂度优化利器,尤其适用于频繁查询数组区间和的场景。它通过预先计算“前缀累积和”,将原本O(n)时间的区间和查询压缩至O(1),是面试、竞赛及工程开发中高频使用的基础技巧。 一、前缀和的…

[n8n] 全文检索(FTS)集成 | Mermaid图表生成

第5章:全文检索(FTS)集成 在前一章中,我们构建了REST API服务作为数据访问入口。 本章将介绍全文检索(FTS)集成,它如同智能搜索引擎,为工作流系统提供高效灵活的检索能力。 核心架构 前文传送: 技术选型 SQLite …

用户模式与内核模式:操作系统的“权限双轨制”

要理解用户模式与内核模式,首先需要明确一个核心概念——进程(Process)。我们日常用C语言编译生成的.exe文件,本质是“存储在磁盘上的静态程序”;当它被加载到内存并开始运行时,就转化为“动态活动的进程”…

探索 Vertex AI 与 Elasticsearch

作者:来自 Elastic Jhon Guzmn 了解如何将 Vertex AI 与 Elasticsearch 集成来创建 RAG 应用。按照本教程配置一个 Gemini 模型并在 Kibana 的 Playground 中使用它。 更多阅读: Elasticsearch:在 Elastic 中玩转 DeepSeek R1 来实现 RAG …

[新启航]白光干涉仪在微透镜阵列微观 3D 轮廓测量中的应用解析

引言微透镜阵列作为由数百至数千个微米级透镜单元组成的光学元件,在成像系统、光通信、传感器等领域应用广泛,其表面微观 3D 轮廓参数(如曲率半径、面型误差、中心厚度等)直接影响光学性能。白光干涉仪凭借非接触、高精度、三维成…

MTK Linux DRM分析(十四)- Mediatek KMS实现mtk_drm_drv.c(Part.2)

一、MTK KMS分析 mtk_drm_kms_init 函数分析 mtk_drm_kms_init 是 MediaTek DRM 驱动程序中的一个静态函数(static int mtk_drm_kms_init(struct drm_device *drm)),位于 mtk_drm_drv.c 文件中。该函数的主要作用是初始化 DRM 设备的 Kernel Mode Setting (KMS) 子系统,包…

大模型RAG(Retrieval-Augmented Generation)

RAG检索增强生成 一种结合了检索与生成能力的人工智能技术,主要用于增强大型语言模型在特定任务中的表现。 含义 RAG 将检索系统与生成模型相结合,当接收到一个查询或问题时,模型首先通过检索模块从大规模知识库中寻找与查询相关的信息片段&a…

企业版Idea 无快捷键的启动方式

在没有快捷键的情况下启动 IntelliJ IDEA 企业版,可以通过以下几种方式进行操作: 1. 通过应用程序菜单启动(适用于 macOS) 在 macOS 系统中,可以打开 Launchpad,在应用程序列表中找到 IntelliJ IDEA&#x…

智慧清洁革命:有鹿机器人如何重塑三大行业未来

作为有鹿智能巡扫机器人,每天清晨当城市还未苏醒,我已悄然完成数万平方米的清洁工作。搭载254TOPS算力的具身智能大脑,我正重新定义保洁、环卫和物业行业的清洁标准。技术赋能:智慧清洁的全面突破我搭载的Master2000通用具身大脑和…

安宝特方案丨AR异地专家远程支持平台,适合:机电运维、应急处置、监造验收

随着车间设备智能化程度的不断提高,其复杂性越来越高,故障维修难度越来越大,严重依赖设备原厂的技术支持和上门服务。但设备厂家受制于地理远近和专业人才数量的限制,服务的及时性和服务质量均很难保证。鉴于市场现有的通信聊天软…

QT应用层项目20250822

01.服务器端代码1.dbhelper.cpp#include "dbhelper.h" #include <iostream> #include <cstring>using std::string; using std::cerr; using std::cout; using std::endl;template <typename T> std::vector<T>& operator<<(std::…

【Linux】Linux基础开发工具从入门到实践

前言&#xff1a;学了Linux的指令&#xff0c;再就是Linux基础开发工具&#xff0c;熟练掌握基础开发工具是提升效率的关键。本文学习Linux的基础开发工具&#xff0c;无论是软件安装、代码编辑&#xff0c;还是编译调试、版本控制&#xff0c;一套顺手的工具链能让你在开发路上…

黑马点评|项目日记(day02)

目录 一. 全局id生成器 1.为什么需要全局id生成器 2.传统方式的缺陷: 3.典型全局 ID 生成方案的设计思路 二.优惠券秒杀-Redis实现全局唯一id 三.优惠券秒杀-添加优惠券 四.优惠券秒杀-实现秒杀下单 五. 一人一单问题 1.单体项目下 1,超卖问题思路分析 2.乐观锁解决问…

shell脚本编程规范与变量

文章目录Shell编程文档整理一、Shell介绍1.1 简介1.2 Shell解释器二、快速入门2.1 编写Shell脚本2.1.1 创建脚本示例2.1.2 赋予执行权限2.2 执行Shell脚本三、Shell程序&#xff1a;变量3.1 语法格式3.2 变量使用3.3 变量类型四、字符串4.1 单引号4.2 双引号4.3 获取字符串长度…

【AGI使用教程】Coze 搭建智能体(1)

欢迎关注【AGI使用教程】 专栏 【AGI使用教程】GPT-OSS 本地部署&#xff08;1&#xff09; 【AGI使用教程】GPT-OSS 本地部署&#xff08;2&#xff09; 【AGI使用教程】Coze 搭建智能体&#xff08;1&#xff09; 【AGI使用教程】Coze 搭建智能体&#xff08;2&#xff09; 【…

(二分查找)Leetcode34. 在排序数组中查找元素的第一个和最后一个位置+74. 搜索二维矩阵

首先要明确二分查找算法如何实现&#xff0c;是采用左闭右闭还是左闭右开 左闭右闭 第⼀种写法&#xff0c;我们定义 target 是在⼀个在左闭右闭的区间⾥&#xff0c;也就是[left, right] &#xff08;这个很重要⾮常重要&#xff09;。 区间的定义这就决定了⼆分法的代码应…

损失函数,及其优化方法

什么是损失函数&#xff1f;损失函数&#xff0c;也称为代价函数&#xff0c;是一个用来​​衡量机器学习模型预测结果与真实值之间差距​​的函数。损失函数的优化方法有哪些&#xff0c;各自优缺点是什么&#xff0c;他们的应用范围是什么&#xff1f;方法类别代表算法核心思…

pyqt+Python证件号智能校验工具

目录 一、引言 二、GUI界面设计 1.相关提示 2.效果演示 3.界面设计.py 三、主要程序详解 1.导入相关模块 2.初始化设置 3.校验过程 四、总程序代码 一、引言 在数字化转型加速的背景下&#xff0c;证件信息核验已成为金融、政务、安防等领域的刚需。传统人工校验存在…

主流技术栈 NestJS、TypeScript、Node.js版本使用统计

&#x1f4ca; 2024年主流技术栈版本使用统计&#x1f527; TypeScript 采用情况全球采用率: 38.5% 的开发者使用 TypeScript&#xff08;Stack Overflow 2024&#xff09;增长趋势: 从 2017年的 12% 增长到 2024年的 35%&#xff08;JetBrains 调研&#xff09;TypeScript vs …

Techub News 与 TOKENPOST 达成战略合作以推动中韩 Web3 资讯互通

Techub News 消息&#xff0c;香港 Web3 媒体 Techub News 与韩国区块链媒体 TOKENPOST 达成战略合作。TOKENPOST 将开设香港内容板块&#xff0c;由 Techub News 提供本地化行业资讯&#xff1b;同时 Techub News 将推出韩国内容专栏&#xff0c;内容源由 TOKENPOST 支持。这一…