首页 > 解决方案 > 推送构建的图像时,Gitlab-runner 有“访问被拒绝”

问题描述

我在将使用 gitlab-runner 构建的映像推送到 gitlab 存储库时遇到问题。

我的 gitlab-ci.yml:

image: docker:latest
services:
- docker:dind

stages:
- build
- release

variables:
TEST_IMAGE: registry.gitlab.com/myhost/haproxy:$CI_COMMIT_REF_NAME
RELEASE_IMAGE: registry.gitlab.com/myhost/haproxy:latest

before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN gitlab.com

build:
stage: build
script:
- docker build --pull -t $TEST_IMAGE .
- docker push $TEST_IMAGE

release:
stage: release
script:
- docker pull $TEST_IMAGE
- docker tag $TEST_IMAGE $RELEASE_IMAGE
- docker push $RELEASE_IMAGE
only:
- master

docker login 有效——我得到了“登录成功”——但是当涉及到推送操作时,我得到:

$ docker push $TEST_IMAGE
The push refers to repository [registry.gitlab.com/myhost/haproxy]
d77ab2f42dd4: Preparing
c70258f465dd: Preparing
96b45c1aa07c: Preparing
28587e66f3e8: Preparing
21b59fc0e3a3: Preparing
9c46f426bcb7: Preparing
9c46f426bcb7: Waiting
denied: access forbidden
ERROR: Job failed: exit code 1

跑步者在我自己的服务器上,我正在推送到 gitlab.com

我还检查了我的本地机器,在脚本中执行终端命令 - 登录,构建和推送 - 一切正常,但如果我使用跑步者在本地运行,注册并获得工作,我也会获得禁止访问错误。

所以我认为问题出在跑步者身上,博什么。我比较了从 10.6 到最新 11.0 的几个 gitlab-runner 版本的行为

有任何想法吗?

标签: gitlab-cigitlab-ci-runner

解决方案


所以问题是错误的注册表地址 - 它应该是 registry.gitlab.com

它误导了我,即使没有“注册表”前缀,它也会在终端中显示“登录”,因此最好的解决方案是在 gitlab-ci.yml 登录期间使用内置变量:

docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY 

推荐阅读