Gitlab CE:如何配置 Docker 注册表
Gitlab CE : how to configure 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 reconfigure 覆盖了它...
问题可能是自签名证书
https://docs.docker.com/registry/insecure/#use-self-signed-certificates
您必须创建证书的副本才能让 Docker 信任它。将其复制到 Docker 主机上的 /etc/docker/certs.d/gitlab:5005/ca.crt。
我已经有一段时间没有这样做了,但我似乎记得在我们最终让它工作之前有点棘手。确保将正确的文件复制到正确的位置。
好的,解决了!
这里明确提到了问题:https://gitlab.com/gitlab-org/gitlab-foss/issues/22707 and here: 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
我疯狂地尝试 运行 本地 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 reconfigure 覆盖了它...
问题可能是自签名证书
https://docs.docker.com/registry/insecure/#use-self-signed-certificates
您必须创建证书的副本才能让 Docker 信任它。将其复制到 Docker 主机上的 /etc/docker/certs.d/gitlab:5005/ca.crt。
我已经有一段时间没有这样做了,但我似乎记得在我们最终让它工作之前有点棘手。确保将正确的文件复制到正确的位置。
好的,解决了!
这里明确提到了问题:https://gitlab.com/gitlab-org/gitlab-foss/issues/22707 and here: 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