无法使用docker login --password-stdin命令

3

我希望在自动构建过程中推送一个已构建的Docker镜像到中央Docker Hub。为了能够这样做,我需要先登录然后再执行推送操作。

下面是.gitlab-ci.yml文件中相关的部分:

docker-deploy:
  image: docker:latest
  stage: deploy
  before_script:
    - echo $HUB_PW | docker login -u $HUB_USER --password-stdin
  after_script:
    - docker logout
  script:
    - docker push <mytag>:$CI_PIPELINE_ID

我在Gitlab CI中遇到了以下错误:
$ echo $HUB_PW | docker login -u $HUB_USER --password-stdin
Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password

相关的环境变量$HUB_PW$HUB_USER已正确设置。

我尝试在具备 docker 的 Linux bash 中执行相同步骤,结果相同。

然而,我能够交互登录到 Docker。

docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: <myusername>
Password: 
Login Succeeded

当我退出登录时,我会看到:

docker logout
Removing login credentials for https://index.docker.io/v1/

无法在自动构建中进行交互式登录。我不理解使用交互式登录和包含密码的URL之间的差异。

是否有人知道如何使此设置工作?


我不确定这是否有所帮助,但也许可以从引用密码开始,以避免一些特殊字符的问题,因此我会写 echo "$HUB_PW" | docker login -u "$HUB_USER" --password-stdin - Jakub Bujny
@JakubBujny 感谢您的提示,但我的密码并不是那么危险,如果我引用环境变量也没有任何区别。 - mliebelt
2个回答

0

我曾经遇到过类似的问题,因为$USERNAME包含了$字符。通过在.gitlab-ci.yml中直接使用转义字符的名称进行docker登录
例如:robot\$myname

GitLab成功连接到Docker Hub。


0

在Gitlab中,带有$的变量可以通过双美元符号进行转义,例如robot$$pusher

\$在企业版13.6.7-ee上对我无效,但据我所知,双美元符号转义语法至少从社区版11.0.3开始就存在了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接