docker - gitlab CE docker push 到托管在 s3 中的注册表失败,出现 "denied: access forbidden"

标签 docker gitlab gitlab-ci

在 gitlab CE docker 推送到托管在 s3 中的注册表失败,并显示“拒绝:禁止访问”

这是我的 gitlab-ci.yml 文件的示例:

    before_script:
      - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN gitlab.domain.net (successful)

    Build:
      stage: build
      script:
        - docker build --pull -t $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME .  (successful)
        - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME    (FAILS)

结果:推送期间失败。
    The push refers to repository [gitlab.domain.net:6565/sfloyd/myapp]
    7f44c19d438d: Preparing
    26472437084c: Preparing
    2de391e51d73: Preparing
    d73dd9e65295: Preparing
    686245e78935: Preparing
    d7ff1dc646ba: Preparing
    644879075e24: Preparing
    d7ff1dc646ba: Waiting
    644879075e24: Waiting
    denied: access forbidden
    ERROR: Job failed: exit code 1

我尝试过不使用 S3 并让注册表将图像存储在 gitlab 服务器本身上,但结果相同。我什至将 S3 存储桶设置为向世界开放以供读写作为测试,但也失败了。
CI_JOB_TOKEN 被授予“read_registry”访问权限,就像 Gitlab 文档所述......虽然我觉得它也应该有 write 但它不是一个选项。
我已经用 token 的用户名换掉了登录用户名,但结果相同。
我为我的管理员用户创建了一个访问 token ,授予它 API 访问权限,但失败了。
有趣的是,如果我使用我的管理员用户和具有 API 访问权限的访问 token ,它可以在本地工作,但当我将这些相同的值放在 gitlab-ci.yml 文件中时就不行。
    $ docker images
    REPOSITORY                            TAG                 IMAGE ID                            CREATED             SIZE
    gitlab.domain.net:6565/sfloyd/myapp   master              b03b47a5987d        14 seconds ago      211MB
    ubuntu                                16.04                       5e8b97a2a082        2 days ago          114MB
    $ docker push gitlab.domain.net:6565/sfloyd/myapp:master
    The push refers to repository [gitlab.domain.net:6565/sfloyd/myapp]
    6852ea579a31: Pushed
    5f7a44809386: Pushed
    2de391e51d73: Layer already exists
    d73dd9e65295: Layer already exists
    686245e78935: Layer already exists
    d7ff1dc646ba: Layer already exists
    644879075e24: Layer already exists
    master: digest:         sha256:0f9f6c3d6ebc7f23f52a5b7be06457359de1c24959336de5b5e9e0a208a5b8c8         size: 1781

我几乎用尽了我能想到的一切。有人有建议吗?

GitLab 10.8.1 Gitlab Runner 10.8.0
也不确定这是否重要,但这是一个私有(private)项目。

最佳答案

万一其他人遇到这种情况,它可以工作...

由于某种原因,这作为我的登录名:
docker login -u $CI_REGISTRY_USER -p $CI_JOB_TOKEN $CI_REGISTRY

但是当我硬编码这些值时不起作用。

关于docker - gitlab CE docker push 到托管在 s3 中的注册表失败,出现 "denied: access forbidden",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50764883/

相关文章:

haskell - Haskell Stack 项目 : How to cache built libraries? 的 gitlab-CI

gitlab - 如何传递凭据以在 Gitlab CI 脚本中拉取子模块?

git - 在 git 存储库中,如何删除旧的重命名“大写”文件夹而不丢失 Git 历史记录

docker - 使用共享运行器访问 gitlab 注册表

gitlab-ci - 多个扩展或多个阶段?

mongodb - 无法使用 mongoose 连接到 mongo docker 镜像

dns - 如何在Marathon Docker参数中使用变量

python - 使用 headless Chrome运行Selenium的AWS Lambda容器在本地工作,但不在AWS Lambda中工作

Docker rmi 无法删除图像

docker - 如何进行代码接收和Gitlab CI(持续集成)