如何从GitLab';在.gitlab-ci.yml中是否有Docker注册表?

如何从GitLab';在.gitlab-ci.yml中是否有Docker注册表?,gitlab,gitlab-ci-runner,Gitlab,Gitlab Ci Runner,我最近打开了GitLab的Docker注册表功能,它在我的桌面上运行得很好。我们的下一步是在通过GitLab CI构建软件时使用注册表。我没有建立docker映像(文档中以各种方式描述了docker映像,官方twitter帐户也提到了一些media.com帖子),我找不到从GitLab的注册表中提取我们自己的映像的方法 如果我们通过.gitlab ci.yml中的image指令从注册表中指定一个映像,我们会得到一个授权错误(我希望工作人员可能会透明地授权自己,但事实并非如此): 因此,工人中的某

我最近打开了GitLab的Docker注册表功能,它在我的桌面上运行得很好。我们的下一步是在通过GitLab CI构建软件时使用注册表。我没有建立docker映像(文档中以各种方式描述了docker映像,官方twitter帐户也提到了一些media.com帖子),我找不到从GitLab的注册表中提取我们自己的映像的方法

如果我们通过
.gitlab ci.yml
中的image指令从注册表中指定一个映像,我们会得到一个授权错误(我希望工作人员可能会透明地授权自己,但事实并非如此):

因此,工人中的某个人应该调用docker login。这有两个问题:

  • 我们通过LDAP对用户进行身份验证。我们真的应该只为CI服务器创建一个静态用户吗
  • 我们这里有不少工人。这是很多工作要SSH到每一个单独的
  • 我是否忽略了一些非常明显的事情,还是应该在每个工作节点上使用docker登录

    我们运行GitLab 8.10.6。

    我也遇到了这个问题。 gitlab ci multi-runner项目中也存在这样一个问题:

    参考文档,您只需登录到机器上的私有注册表,即可运行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
    
    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}"
    
    参考此示例,root must登录到注册表:

    docker login https://registry.host.tld:5000
    
    这里重要的部分是注册的URI。我遇到了一个类似于您的错误,并通过运行以下命令克服了它:

    docker login https://registry.host.tld:5000/v2/
    
    这在其他注册表上可能不同,您必须查看eoor消息并使用“namespace/project/as”前面的部分作为登录路径

    例如,如果错误消息如下所示:

    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
    
    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/
    
    希望这有帮助。

    我也有这个问题。 gitlab ci multi-runner项目中也存在这样一个问题:

    参考文档,您只需登录到机器上的私有注册表,即可运行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
    
    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}"
    
    参考此示例,root must登录到注册表:

    docker login https://registry.host.tld:5000
    
    这里重要的部分是注册的URI。我遇到了一个类似于您的错误,并通过运行以下命令克服了它:

    docker login https://registry.host.tld:5000/v2/
    
    这在其他注册表上可能不同,您必须查看eoor消息并使用“namespace/project/as”前面的部分作为登录路径

    例如,如果错误消息如下所示:

    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
    
    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/
    
    希望这有帮助