我希望在自动构建过程中推送一个已构建的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