尝试使用本地的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重新配置将其覆盖...
答案 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