首页 > 解决方案 > 如何通过已设置管理员凭据的 docker-compose 启动 gitlab-ce 容器?

问题描述

我有一个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

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

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

Gitlab自己的答案:

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

如果我在一切都设置好(需要几分钟)后 ssh 进入 Gitlab CE 容器,这会起作用。

通过直接运行它command不起作用 - 大概是因为gitlab-rails console容器启动时还没有准备好。

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

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

标签: dockerdocker-composegitlab

解决方案


解决方案是将 设置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

启动服务时,确认:

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

推荐阅读