我有一个带有 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
有什么关系
答案 0 :(得分:0)
您收到该错误是因为您的运行程序(和/或作业)在尝试拉取映像之前未通过 ECR 注册表进行身份验证。您需要以下列形式之一提供身份验证数据:
$DOCKER_AUTH_CONFIG
变量(有关信息,请参阅文档:https://docs.gitlab.com/ee/ci/variables/README.html#create-a-custom-variable-in-gitlab-ciyml)$DOCKER_AUTH_CONFIG
项目变量(请参阅此处的文档:https://docs.gitlab.com/ee/ci/variables/#create-a-custom-variable-in-the-ui)$DOCKER_AUTH_CONFIG
文件 (https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#configuring-a-runner) 中的 config.toml
变量有关设置 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