docker - 如何通过已设置管理员凭据的 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 管理员密码。
解决方案
解决方案是将 设置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
推荐阅读
- xamarin - 带有 xamarin 的 Admob 原生广告:“广告加载失败:0”
- makefile - 为什么像 CMake 这样的构建系统会生成递归的 makefile 而不是一个大的 makefile?
- laravel - 一对多逆
- java - 无法使用jackson在springboot中返回JSON
- laravel - 在 laravel 上使用护照包时认证错误
- android-studio - 项目重命名后编译失败
- regex - 使用 sed 和 regex 隔离数据
- azure-data-lake - 如何组合不同的模式
- spring - Netflix Ribbon 抛出 No instances available for MY-MICROSERVICE 异常
- python - 如何使用 python 更新现有的 excel 文件