不能从gitlab CI拉或推到个人注册表



我实现了自己的docker注册表,并成功地从本地主机(push)和服务器(pull)测试了它。现在,我正试图从我的CI管道构建和推送图像:

build:
image: docker:18
services:
- docker:dind
stage: build
script:
- echo -n $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
- docker pull $CI_REGISTRY/website:latest
- docker build -t $CI_REGISTRY/website:latest .
- docker push $CI_REGISTRY/website:latest

我可以登录到注册表:

$ echo -n $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

当我试图拉我的网站:最新

$ docker pull $CI_REGISTRY/website:latest
Error response from daemon: pull access denied for registry.gitlab.com/website, repository does not exist or may require 'docker login': denied: requested access to the resource is denied

我在CI/CD中正确配置了所有变量→<<strong>变量/strong>但是我可以在这里看到registry.gitlab。com作为我的注册表。我试图重命名CI_REGISTRYCI_REGISTRY_ADDRESS,因为我想,也许gitlab使用它作为系统变量,我不能取代它(即使我使用这个设置,变量和登录,就像在另一个项目一样,它的工作方式)。所以现在,我收到这个错误:

$ echo -n $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY_ADDRESS
Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password
我试着用谷歌搜索解决方案,但没有找到任何有用的东西。我不知道为什么这个设置适用于另一个项目,而不是这个项目。也许我错过了什么,不确定是什么。有没有人能帮我找出问题的原因以及如何配置个人注册表

EDIT1:只是一个例子,相同的配置在我的另一个项目上工作得很好:

$ echo -n $CI_REGISTRY_PASSWORD | docker login -u $CI_REGISTRY_USER --password-stdin $CI_REGISTRY
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded

成功登录后,我可以推送和拉图像。

经过一番调查,我找到了根本原因。

我发现,我所有的变量都是空的(我先检查了,如果没有打字错误):

echo "$PERSONAL_CI_REGISTRY_USER - $PERSONAL_CI_REGISTRY_PASSWORD - $PERSONAL_CI_REGISTRY"
-  - 

从这个问题在stackoverflow上,它看起来像类似的问题-受保护的变量. 所以我检查了我的变量,将它们设置为不受保护,然后我就可以在CI管道中回显它们:

$ echo "$PERSONAL_CI_REGISTRY_USER - $PERSONAL_CI_REGISTRY_PASSWORD - $PERSONAL_CI_REGISTRY"
registryuser123456 - registrypassword123456 - registry123456

保护vairables仅在受保护的分支或标签中可用-参见文档。

所以我将其重命名为与我在另一个项目中使用的方式相同:

docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY

现在我可以登录注册表,拉和推没有任何问题。

最新更新