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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM