如何使用已设置的管理员凭据通过 docker-compose 启动 gitlab-ce 容器?

cbl*_*bll 6 gitlab docker docker-compose

我有一个docker-compose.yml带有 Gitlab CE 容器的文件:

services:
  // other services..
  gitlab:
    image: 'gitlab/gitlab-ce'
    restart: always
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
      - "127.0.0.1:8081:80"
    volumes:
      - '/etc/gitlab'
      - '/var/log/gitlab'
      - '/var/opt/gitlab'
    networks:
      - backend
Run Code Online (Sandbox Code Playgroud)

启动时,这需要您打开浏览器,转到(在本例中)localhost:8081并手动输入密码。

我希望这个过程能够自动化(用于本地开发和测试目的)。

Gitlab 自己的答案:

    gitlab-rails console production
    user = User.where(id: 1).first
    user.password = 'somethingsomething'
    user.password_confirmation = 'somethingsomething'
    user.save!
    exit
Run Code Online (Sandbox Code Playgroud)

如果我在一切设置完毕后 ssh 进入 Gitlab CE 容器(需要几分钟),那么它就可以工作。

直接通过运行此命令command不起作用 - 可能是因为gitlab-rails console容器启动时尚未准备好运行。

我尝试使用Dockerfile图像手动创建一个gitlab/gitlab-ce,用于COPY将上述脚本放入容器及其中CMD。然而,正如预测的那样,这会失败,因为gitlab-rails console启动时尚未准备好。这需要一段时间。

理想的场景是容器启动、安装 Gitlab 并完成所有设置工作;然后自动设置 root 管理员密码。

cbl*_*bll 7

解决方案是将 设为GITLAB_OMNIBUS_CONFIG环境变量。

这有效:

services:
  // other services..
  gitlab:
    image: 'gitlab/gitlab-ce'
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        gitlab_rails['initial_root_password'] = 'adminadmin'
    ports:
      - '80:80'
      - '443:443'
      - '22:22'
      - "127.0.0.1:8081:80"
    volumes:
      - '/etc/gitlab'
      - '/var/log/gitlab'
      - '/var/opt/gitlab'
    networks:
      - backend
Run Code Online (Sandbox Code Playgroud)

启动服务时,确认了这一点:

gitlab_1       |               == Seed from /opt/gitlab/embedded/service/gitlab-rails/db/fixtures/production/002_admin.rb
gitlab_1       |               Administrator account created:
gitlab_1       |               
gitlab_1       |               login:    root
gitlab_1       |               password: adminadmin
Run Code Online (Sandbox Code Playgroud)