如何在 Gitlab Runner 中定义私有仓库镜像

时间:2021-01-23 08:55:04

标签: docker gitlab amazon-ecr

我有一个带有 docker+machine 执行器的 gitlab runner 寄存器,并且我已经设置了我的 `.gitlab-ci.yml' 如下:

stages:
  - RUN_TESTS
  - CLEAN

image:
  name: <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<NAMESPACE>:<TAG>

图像 <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<NAMESPACE>:<TAG> 是私有的 AWS ECR 存储库。它每次都失败,因为这是一个私有存储库。

如何配置它以提取此私有映像?

我使用 aws ecr get-login-password --region us-east-2 命令获得了 ecr 的密码,并提供了密码。

我研究了这个 docker-credential-ecr-login 工具并将其安装在 runner 实例中。我使用 aws configure 配置了 AWS 凭证,凭证现在位于 ~/.aws/credentials

并将以下块添加到 ~/.docker/config.json 中,如下所示:

"credHelpers": {
        "<aws_account_id>.dkr.ecr.<region>.amazonaws.com": "ecr-login"
    }

但是当我尝试 docker pull <AWS_ACCOUNT_ID>.dkr.ecr.<AWS_REGION>.amazonaws.com/<NAMESPACE>:<TAG> 时,它给了我以下错误:

<块引用>

来自守护进程的错误响应:获取 https://Account-ID.dkr.ecr.REGION.amazonaws.com/v2/spot-runner-image/manifests/latest:没有基本身份验证凭据

docker-credential-ecr-login有什么关系

1 个答案:

答案 0 :(得分:0)

您收到该错误是因为您的运行程序(和/或作业)在尝试拉取映像之前未通过 ECR 注册表进行身份验证。您需要以下列形式之一提供身份验证数据:

有关设置 DOCKER_AUTH_CONFIG 的文档在这里:https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#define-an-image-from-a-private-container-registry

要确定 DOCKER_AUTH_CONFIG 变量中应包含的内容,您可以使用 docker login example-registry.example.com --username my_user --password my_password 从本地计算机登录到您的注册表。这将在 config.json 目录中创建一个 ~/.docker 文件。但是,在我的 Mac 上,凭据存储在我的钥匙串中,并且 Gitlab 无法使用 config.json 文件。在这种情况下,您必须手动创建内容。所有这些信息以及更多信息都在文档中:https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#determining-your-docker_auth_config-data