Docker启动gitlab后22端口被占用如何解决
文章目录
- 前言
- Docker启动参数
- 解决方案
- 总结
前言
这两天一直在研究Docker启动gitlab的问题,邮件问题暂时告一段落,当真正开始使用gitlab克隆的时候发现,之前22端口被占用无法启动,我就用2022端口做了一个映射,但是在gitab界面上提供的克隆地址类似这样 git@gitlab.gameup.com:games/xxx.git
,丝毫没有端口 2022 的影子,执行 git clone git@gitlab.gameup.com:games/xxx.git
果然不可下载,所以搜索了一圈解决方案总结在此,方便日后查找。
Docker启动参数
docker run --detach \--hostname gitlab.gameup.com \--publish 443:443 --publish 80:80 --publish 2022:22 \--name gitlab \--restart always \--volume /export/docker/gitlab/config:/etc/gitlab \--volume /export/docker/gitlab/logs:/var/log/gitlab \--volume /export/docker/gitlab/data:/var/opt/gitlab \registry.cn-hangzhou.aliyuncs.com/z5z/gitlab-ce:latest
这个在之前的文章中提到过,因为 80 和 443端口正常可用,所有采用HTTP方式的下载 git clone http://gitlab.gameup.com/games/xxx.git
是正常的,而 SSH下载的这种方式,因为修改了默认端口,导致提供的链接无法下载,即使我像这样 git clone git@gitlab.gameup.com:2022/games/xxx.git
加上了端口也无法正常克隆。
用一种比较笨的方法就是,关闭SSH服务或者将宿主机的SSH服务改个端口,但这是一台远程服务器,一般都通过SSH协议访问,关闭不太现实,修改端口的话倒是可行,可是之前这台机器上运行着多个任务,这意味着很多服务脚本都得修改,所以也不是很好的办法,不能因为加了个新服务就把原来的老脚本统统改一遍吧,尝试多次终于找到一个可以接收的方法。
解决方案
-
进入gitlab容器
docker exec -it gitlab
-
修改配置文件
/etc/gitlab/gitlab.rb
中的内容gitlab_rails['gitlab_shell_ssh_port'] = 2022
注意这个设置只是修改了 GitLab 的显示信息,不会更改 GitLab 容器内的 SSH 服务端口
-
执行
gitlab-ctl reconfigure
即可修改执行之后,再次查看gitlab下载地址发现改成了
ssh://git@gitlab.gameup.com:2022/games/xxx.git
,不仅加了端口号,还在前面加上了ssh://
,怪不得我自己加端口号不能能用呢,关于这一点我也查到了相关解释:
GitLab 提供的 SSH 克隆地址(如 git@gitlab.gameup.com:2022/games/xxx.git)是一种简化格式,它没有指定协议前缀 ssh:// 和端口号。这是因为默认情况下,Git 使用 SSH 协议连接,并默认通过端口 22 来克隆和操作仓库。因此,这种简化格式省略了 ssh:// 前缀和端口号
对于标准端口(22),简化格式的地址是有效的,因为 Git 客户端会默认使用 SSH 协议并连接到 22 端口,但是,当你的 SSH 端口不同于 22(如使用 2022 时),Git 默认的简化格式就不适用了,需要显式指定端口号或配置 SSH,也就是写成 ssh://git@gitlab.gameup.com:2022/games/xxx.git 的形式
总结
- 使用docker启动gitlab遭遇22端口占用时可以选择其他端口映射
--publish 2022:22
- 修改映射端口后为了让下载地址显示正确,需要修改gitlab配置文件
gitlab_rails['gitlab_shell_ssh_port'] = 2022
git@gitlab.gameup.com:games/xxx.git
是一种ssh协议的简化形式,完整的地址应该为ssh://git@gitlab.gameup.com:22/games/xxx.git
不要再抑郁下去了孩子,你要像一个,神经病一样活泼开朗,不要太在乎别人的目光,因为没人会注意你。