整活 · 10月 26, 2021 0

用Docker-compose部署Gitlab过程中遇到的坑

花了一整个宝贵的晚上跟这玩意儿战斗……有必要记录一下过程中遇到的种种麻烦,前人栽树,后人乘凉。

官网上给出的示例docker-compose.yml里是这样写的:

web:
  image: 'gitlab/gitlab-ee:latest'
  restart: always
  hostname: 'gitlab.example.com'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'https://gitlab.example.com'
      # Add any other gitlab.rb configuration here, each on its own line
  ports:
    - '80:80'
    - '443:443'
    - '22:22'
  volumes:
    - 'GITLAB_HOME/config:/etc/gitlab'
    - 'GITLAB_HOME/logs:/var/log/gitlab'
    - '$GITLAB_HOME/data:/var/opt/gitlab'

我们一条一条来看里面的坑:

  1. 端口占用
    我就不信- '22:22'在一般机子上能跑的起来,除非SSH端口早就被改了。如果SSH还想继续使用22端口的话,这句需要改成诸如- '22222:22'这样的,把Gitlab用的SSH端口映射到主机的22222端口去。当然其他端口同理。

  2. 环境变量
    你是不是把- '$GITLAB_HOME/config:/etc/gitlab'这句原封不动抄进去了?看来也没仔细读官网说明呀……官网说明开头原话:

    For Linux users, set the path to /srv/gitlab:
    export GITLAB_HOME=/srv/gitlab

    我觉得更稳妥的方法是不要用环境变量,直接把$GITLAB_HOME改成/srv/gitlab比较靠谱。

  3. 特权模式
    有人说这俩坑都避过去了,为啥docker-compose up -d之后用docker ps看到容器还是在循环重启?
    你用docker logs <容器ID>看一眼日志,怕不是会看到一行醒目的信息:
    cp: cannot create regular file '/etc/gitlab/gitlab.rb': Permission denied
    你需要做的是删掉这个容器,然后在docker-compose.yml的内容下面加一行:

web:
  image: 'gitlab/gitlab-ee:latest'
  # 中间省略
  volumes:
    - 'GITLAB_HOME/config:/etc/gitlab'
    - 'GITLAB_HOME/logs:/var/log/gitlab'
    - '$GITLAB_HOME/data:/var/opt/gitlab'
  # 以下为追加内容
  privileged: true

以此让容器运行在特权模式。

至此我们的Gitlab应该是能跑起来了。这玩意儿启动贼慢,只要你在docker ps看到容器还是“starting”状态,那等就是了。

然而你以为这就完了?

  1. 管理员账户是啥
    按理说初次访问Gitlab网页应该是会让你初始化管理员用户名和密码的。然而有时候一通骚操作下来偏偏就直接进了登陆界面,导致不知道密码(用户名是root)无法登录。
    这时候请打开$GITLAB_HOME/config/initial_root_password文件查看初始密码。(可别再把$GITLAB_HOME原封不动抄进去啊)

  2. 点击Clone后Host名不对劲
    在项目中点击“Clone”后出现git@<数字+字母>:gitlab-instance-65ed320f/Monitoring.git这样的地址,怕不是在compose文件中忘了设置hostname吧。把这个字段加上,然后删掉当前容器重新up运行。当然Host名设置有误也可以用同样的办法修正。

  3. 执行git clone后被询问密码
    还记得你改了git的端口吗?这时候就不能直接clone了,需要把命令改成:

git clone ssh://git@<地址>:<自定义端口>/gitlab-instance-65ed320f/Monitoring.git