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/我们这⾥将宿主机的8022端⼝作为gitlab的ssh端⼝,所以在进⾏git clone时,需要改变参数。
在未映射端⼝的情况下,命令为:我们通过gitlab页⾯直接复制clone的链接是这样的,没有展⽰映射的端⼝,因为它不知道⾃⼰在宿主机⾥⾯
git clone git@ipxxxx:group/project.git    ###直接复制会得到这个地址:git@ipxxxx:group/project.git
如果指定端⼝,不能够想当然的设置为ip:port
错误:
docker进入容器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/上⾯的命令将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的其它端⼝
⽅法参考

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。