因爲Docker技術的快速發展,不少著名的開源應用都提供了Docker版本,但因爲某些緣由,一些知名應用提供的Docker運行語句存在必定的問題。
今天就遇到了Docker下運行Gitlab的巨坑。
Docker官方的頁面原文是這樣的:git
sudo docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish 80:80 --publish 22:22 \ --name gitlab \ --restart always \ --volume /srv/gitlab/config:/etc/gitlab \ --volume /srv/gitlab/logs:/var/log/gitlab \ --volume /srv/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
這個坑的點在 --publish 22:22
這裏。這個命令參數的意思是把主機的22
端口映射到 gitlab
鏡像的22
端口以提供SSH
服務,但宿主機自己也須要22
端口提供SSH服務。
我開始運行的時候沒有注意到這一點,運行以上命令的時候提示22
端口不可用,因而直接把22
改爲了33
,因而鏡像順利運行了。可是在gitlab
帳戶設置中添加公鑰之後,使用git
客戶端經過ssh
協議(git@xxxx.git)拉取代碼的時候始終提示輸入密碼,輸入密碼又提示沒權限,折騰了好久,重啓了無數次鏡像,終於發現問題所在。docker
修改宿主機sshd
端口爲88
,使用firewall-cmd --zone=public --add-port=88/tcp --permanent
新增端口,而後systemctl restart sshd
,而後清空客戶端上的known_hosts
,從新clone,順利成功。ssh