我最近打开了GitLab的Docker Registry功能,它在我的桌面上运行得很好。我们的下一步是在通过GitLab CI构建软件时使用注册表。而不是构建docker映像,这是在文档中以各种方式描述的,在几个medium.com帖子中,官方twitter帐户提到,我找不到一种方法从GitLab的注册表中提取我们自己的映像。
如果我们通过.gitlab-ci.yml
中的image指令从注册表中指定一个图像,我们会得到一个授权错误(我期望工作器可能会透明地授权自己,但事实并非如此):
Running with gitlab-ci-multi-runner 1.4.1 (fae8f18)
Using Docker executor with image registry.host.tld/NAMESPACE/PROJECT:latest ...
Pulling docker image registry.host.tld/NAMESPACE/PROJECT:latest ...
ERROR: Build failed (system failure): API error (500): Get https://registry.host.tld/v2/NAMESPACE/PROJECT/manifests/latest: error parsing HTTP 403 response body: no error details found in HTTP response body: "{"message":"forbidden","status":"error","http_status":403}"
所以worker上应该有人调用docker login。这里有两个问题:
- 我们通过LDAP认证我们的用户。我们真的应该为CI服务器创建一个静态用户吗? 我们有相当多的工人在这里运行。要SSH到每一个都需要做很多工作。
我是否忽略了一些非常明显的东西,或者我应该在每个工作节点上走docker登录的路线?
我也遇到过这个问题。还有一个关于gitlab-ci-multi-runner项目的问题:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/1663
参考文档,你应该登录到运行gitlab-runner的机器上的私有注册表:在这里输入链接描述
如果你在docker容器中使用gitlab-runner,你必须将带有登录凭证的文件挂载到gitlab runner容器中。所以运行gitlab容器的命令是这样的:
docker run -d --name gitlab-runner --restart always
-v /var/run/docker.sock:/var/run/docker.sock
-v /srv/gitlab-runner/config:/etc/gitlab-runner
-v /root/.docker/config.json:/root/.docker/config.json
gitlab/gitlab-runner
引用这个例子,root必须登录到注册表:
docker login https://registry.host.tld:5000
这里的重要部分是用于注册的URI。我得到了一个类似于你的错误,并通过运行
来克服它:docker login https://registry.host.tld:5000/v2/
这可能在其他注册中心有所不同,您必须查看eor消息并使用'namespace/project/之前的部分作为登录路径。
。如果错误信息看起来像这样:
ERROR: Build failed (system failure): API error (500):
Get https://registry.host.tld/v1/NAMESPACE/PROJECT/manifests/latest:
error parsing HTTP 403 response body: no error details found in HTTP response body: "
{"message":"forbidden","status":"error","http_status":403}"
登录名必须为:
docker login https://registry.host.tld/v1/