GitlabDocker的hostname设置

背景

在树莓派上用docker搭建了gitlab的环境.并且在web页面添加了ssh-key.
但是在使用ssh克隆项目时,发现

  1. 默认给出hostname的是乱码
  2. 如果将乱码替换为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
2
ssh git@dockerhost -p 522 # 需要成功
ssh git@pihost -p 22 # 针对宿主机,不会成功

单纯使用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解决.

  1. 粗粒度

    字段 external_url 影响http和ssh两种协议的hostname.比如设置为 http://192.168.1.x

  2. 细粒度

    • ssh的hostname: 12.4之后可以配置 gitlab_rails['gitlab_ssh_host']
    • http的hostname: 12.4之后可以在web页面配置
      1. root帐号登陆
      2. Admin Area(扳手图标)
      3. Settings
      4. General
      5. Visibility and access controls
      6. Custom Git clone URL for HTTP(S)

参考

  1. 更改正在运行的docker的hostname
  2. 修改external~url官方说明1~
  3. 修改external~url官方说明2~
  4. 关于分别设置hostname的问答
  5. 设置http用url的官方说明