Docker搭建gitlab之端口映射

一、背景

通过前面的文章docker搭建gitlab,我们已经完成了初始环境的搭建。然后在具体的使用过程中,会发现有坑。

例如在创建完毕用户以及项目之后,我们发现通过ssh来推拉项目文件时,会提示要求输入密码,而我们先前是配置过ssh的密钥的。

二、问题分析

在docker容器中,ssh端口是22,但是我们在启动容器时,会指定容器与宿主机之间的端口映射

例如:有坑的端口映射

sudo docker run     --detach     --publish 8443:443     --publish 8080:80  --publish 8022:22   --name gitlab     --restart unless-stopped     --volume /home/s/gitlab/etc:/etc/gitlab     --volume /home/s/gitlab/log:/var/log/gitlab     --volume /home/s/gitlab/data:/var/opt/gitlab     gitlab/gitlab-ce

我们这里将宿主机的8022端口作为gitlab的ssh端口,所以在进行git clone时,需要改变参数。

在未映射端口的情况下,命令为:我们通过gitlab页面直接复制clone的链接是这样的,没有展示映射的端口,因为它不知道自己在宿主机里面

git clone git@ipxxxx:group/project.git     ###直接复制会得到这个地址 :git@ipxxxx:group/project.git

如果指定端口,不能够想当然的设置为ip:port

错误:
git clone git@10.10.10.10:8022:group/project.git

而需要改变协议方式:正确的clone地址应该是如下,所以我们要改变配置文件,使得直接复制得到的地址正确

git clone ssh://git@10.10.10.10:8022/group/project.git

三、解决方案

这里的坑在于,我们的gitlab是运行在容器中的,通过gitlab的web服务,我们获取到的clone地址,是没有考虑过宿主机与容器之间的端口映射的,所以我们在启动容器时,需要把映射使用的端口考虑进去,最理想的是宿主机端口与容器端口完全对应。因此使用如下命令来运行容器:

理想的端口映射:

80端口映射宿主机80端口,

ssh 8022:22 docker容器内部还是使用22端口

sudo docker run     --detach     --publish 8443:443     --publish 80:80  --publish 8022:8022   --name gitlab     --restart unless-stopped     --volume /home/s/gitlab/etc:/etc/gitlab     --volume /home/s/gitlab/log:/var/log/gitlab     --volume /home/s/gitlab/data:/var/opt/gitlab     gitlab/gitlab-ce

上面的命令将8022端口作为gitlab的ssh映射端口,当我们通过git clone命令下载文件时,要指明使用8022端口。

另外,如果需要在项目工程的clone链接地址使用ip或者域名,可以显示的增加参数:

--hostname '域名' 或者ip

在容器启动之后,我们需要进入容器,然后修改gitlab所默认配置的ssh端口:

docker exec -it 容器id /bin/bash

修改配置文件

vim /etc/gitlab/gitlab.rb

配置项增加:这一项的主要作用是在gitlab上展示8022端口

gitlab_rails['gitlab_shell_ssh_port'] = 8022

 另外一种方法是端口完全映射 22:22 ,80:80,宿主机的ssh端口我们改为非22的其它端口

方法参考

https://blog.csdn.net/wanchaopeng/article/details/86630067

https://www.jianshu.com/p/6eaeedf4e844

posted @ 2020-06-10 17:11  sliec  阅读(5464)  评论(1编辑  收藏  举报