You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gitlab CE配置Docker Registry遇阻:自定义端口认证失败求助

解决GitLab CE Omnibus Docker实例中Registry登录失败的问题

你的问题核心很明确:Registry的认证请求默认指向了GitLab的443端口,但你实际把GitLab的HTTPS服务映射到了4443端口,而且手动修改Registry的配置文件会被gitlab-ctl reconfigure覆盖。下面是具体的解决步骤:

1. 修正gitlab.rb配置

你需要在gitlab.rb中同时修正external_url并显式指定Registry的认证realm地址,确保所有内部服务都使用正确的端口:

# 修正external_url,加上你映射的4443端口
external_url 'https://gitlab:4443'
registry_external_url 'https://gitlab:5005'
registry_nginx['enable'] = true
registry_nginx['ssl_certificate'] = '/etc/gitlab/ssl/gitlab.crt'
registry_nginx['ssl_certificate_key'] = '/etc/gitlab/ssl/gitlab.key'
registry_nginx['listen_port'] = '5005'
registry_nginx['listen_https'] = true
# 强制指定Registry的认证令牌请求地址,指向GitLab的4443端口
registry['auth_token_realm'] = 'https://gitlab:4443/jwt/auth'

配置说明:

  • 修正external_url是因为Omnibus GitLab会基于这个地址生成内部服务的链接,包括Registry的认证地址,之前没加端口导致默认用443
  • registry['auth_token_realm']参数会直接控制Registry配置文件中的auth.token.realm值,不会被reconfigure覆盖

2. 应用配置并重启服务

进入你的GitLab容器:

docker exec -it gitlab /bin/bash

在容器内执行配置刷新:

gitlab-ctl reconfigure

为了确保Registry服务加载新配置,重启Registry:

gitlab-ctl restart registry

3. 验证配置生效

在容器内查看Registry的配置文件,确认realm地址已更新:

cat /var/opt/gitlab/registry/config.yml | grep realm

输出应该显示:realm: https://gitlab:4443/jwt/auth

4. 测试Docker登录

退出容器后,执行登录命令:

docker login https://gitlab:5005

现在应该可以正常输入用户名和密码完成登录了。

额外注意事项

  • 如果你使用的是自签名证书,需要确保Docker信任该证书:
    • Linux系统:将gitlab.crt复制到/etc/docker/certs.d/gitlab:5005/ca.crt
    • Docker Desktop:在设置中添加该证书到信任列表

内容的提问来源于stack exchange,提问作者Joulss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:58:30