Gitlab CE:如何配置Docker注册表

时间:2019-09-19 15:16:52

标签: docker gitlab docker-registry

尝试使用本地的Gitlab CE omnibus实例及其Docker注册表和自签名证书来发疯。

我创建了证书,密钥,Docker网络,并从Docker映像安装了Gitlab,如下所示:

docker run --hostname gitlab \
           --name gitlab \
           --net-alias=gitlab \
           --detach \
           --restart always \
           --net gitlabnetwork \
           --ip 172.50.0.10 \
           --publish 4443:443 \
           --publish 5005:5005 \
           --volume /tmp/gitlabConfig/:/etc/gitlab \
           --volume /tmp/gitlabLogs/:/var/log/gitlab \
           --volume /tmp/gitlabData/:/var/opt/gitlab \
           gitlab/gitlab-ce

我在/ etc / hosts中添加了一个条目,如下所示:

127.0.0.1 gitlab

Gitlab在https://gitlab:4443上似乎运行良好,使用GUI一切正常。但是我无法到达注册表。在登录docker期间,错误消息如下:

$ docker login https://gitlab:5005
Error response from daemon: Get https://gitlab:5005/v2/: Get https://gitlab/jwt/auth?account=root&client_id=docker&offline_token=true&service=container_registry: dial tcp 127.0.0.0.1:443: connect: connection refused

与docker登录https://127.0.0.1:5005相同的结果

gitlab_registry_access.log将此日志记录下来:

172.50.0.1 - - [19/Sep/2019:15:41:17 +0000] "GET /v2/ HTTP/1.1" 401 87 "" "docker/18.09.7 go/go1.10.1 git-commit/2d0083d kernel/4.15.0-62-generic os/linux arch/amd64 UpstreamClient(Docker-Client/18.09.7 \x5C(linux\x5C))"

这是文件gitlab.rb的参数:

external_url 'https://gitlab'
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

我已经阅读并重新阅读了该文档,但我看不出该如何使用它。 欢迎任何帮助。

更新:

前进。我认为问题来自/var/opt/gitlab/registry/config.yml文件中的配置:

auth:
  token:
    realm: https://gitlab/jwt/auth
    ...

似乎没有考虑自定义端口。我认为应该是

   realm: https://gitlab:4443/jwt/auth

我尝试手动编辑它,但是gitlab-ctl重新配置将其覆盖...

2 个答案:

答案 0 :(得分:0)

问题可能是自签名证书

https://docs.docker.com/registry/insecure/#use-self-signed-certificates

您必须创建证书的副本才能使Docker信任它。将其复制到Docker主机上的/etc/docker/certs.d/gitlab:5005/ca.crt。

我已经有一段时间没有这样做了,但是我似乎还记得在我们最终使它工作之前有些棘手。确保将正确的文件复制到正确的位置。

答案 1 :(得分:0)

好的,解决了!

在以下位置清楚地提到了该问题:https://gitlab.com/gitlab-org/gitlab-foss/issues/22707和此处:Gitlab docker and external_url

问题在于,注册表身份验证阶段使用的是内部地址。

在我的情况下,Docker客户端尝试在端口443上加入身份验证API,因为该容器可通过端口4443(映射到443)访问,所以无法访问。

结论:容器的external_url端口和侦听端口必须相同。

我这样修改了gitlab.rb(不需要其他registry_nginx设置):

external_url "https://gitlab:4443
registry_external_url "https://gitlab:5005

关于容器的开头:

--publish 4443:4443