GitlabDocker的hostname设置
背景
在树莓派上用docker搭建了gitlab的环境.并且在web页面添加了ssh-key.
但是在使用ssh克隆项目时,发现
- 默认给出hostname的是乱码
- 如果将乱码替换为192.168.1.x则会提示需要[email protected]的密码.
原因
乱码的出现是因为没有人为设置docker的hostname.给出了随机值.
造成在克隆项目时产生的是 git@abdcef123:username/project.git
和 http://abcdef123/username/project.git
索要密码是因为对方无法区分,这个ip地址,到底是指宿主机,还是docker.
gitlab docker自身要求设置里添加的ssh-key需要使以下命令成功
1 | ssh git@dockerhost -p 522 # 需要成功 |
单纯使用ip地址,无法区分
因此解决方法可以分为两种
- 被动修改请求端
- 主动修改服务端
被动修改请求端
查看docker的hostname可以使用
1 | docker exec gitlab hostname |
其中 hostname
是一个命令,似乎是查看 /proc/sys/kernel/hostname
文件,
永久修改则需要修改 /etc/hostname
和 /etc/hosts
.
知道dockerhost后配置自己的ssh,使用ip+port的方式确定目标.
乱码也无所谓,一次配置,永久能用,嫌弃另说.
如果非要手动使用参数,则可以使用
1 | git clone ssh://[email protected]:522/username/project.git |
主动修改服务端
目前修改的方法有两种
- 直接修改docker本身的hostname(两个一同影响)
- 修改gitlab的配置(现在可以分别设置http和ssh了)
- 粗粒度:
external_url
- 细粒度: 分别设置
- 粗粒度:
修改docker本身的hostname
如果在启动容器的阶段(docker run)时,使用 --hostname
选项指定,
则docker内部的 /etc/hostname
会变成指定的值,且gitlab会使用该hostname.
在容器已经建立起来的前提下,修改该文件的值非常困难.
参考中有过一些讨论但看起来不能生效.
不过如果设置了卷持久化,那么删除容器重新启动也不会丢失数据.
修改gitlab的配置
配置文件在docker内部的 /etc/gitlab/gitlab.rb
中.
使配置生效可以使用 docker exec gitlab gitlab-ctl reconfigure
如果之后出问题,可以重启几次docker解决.
-
粗粒度
字段
external_url
影响http和ssh两种协议的hostname.比如设置为http://192.168.1.x
-
细粒度
- ssh的hostname: 12.4之后可以配置
gitlab_rails['gitlab_ssh_host']
- http的hostname: 12.4之后可以在web页面配置
- root帐号登陆
- Admin Area(扳手图标)
- Settings
- General
- Visibility and access controls
- Custom Git clone URL for HTTP(S)
- ssh的hostname: 12.4之后可以配置