如果 amazon ecr credential helper 安装在我的 EC2 VM 上,我可以在 docker 容器中使用它吗?

Can I use amazon ecr credential helper inside a docker container if its installed on my EC2 VM?

我已经在我们的 ec2 实例上安装了凭证助手 GitHub 并让它为我的帐户工作。我想做的是在我的 GitLab CI/CD 管道中使用它,我的 gitlab-runner 实际上是 运行 在 docker 容器中,并为构建、测试和生成新容器部署阶段。这就是我们的测试阶段现在的样子:

image: docker:stable
run_tests:
  stage: test
  tags:
    - test
  before_script:
    - echo "Starting tests for CI_COMMIT_SHA=$CI_COMMIT_SHA"
    - docker run --rm mikesir87/aws-cli aws ecr get-login-password | docker login --username AWS --password-stdin $IMAGE_URL
  script:
    - docker run --rm $IMAGE_URL:$CI_COMMIT_SHA npm test

这工作正常,但我想看看我是否可以工作如下:

image: docker:stable
run_tests:
  image: $IMAGE_URL:$CI_COMMIT_SHA
  stage: test
  tags:
    - test
  script:
    - npm test

当我尝试第二个选项时,我得到了 no basic auth credentials。所以我想知道是否有一种方法可以让凭据助手映射到 docker 容器,而不必在图像本身上安装凭据助手。

将您的运行器配置为使用带有 DOCKER_AUTH_CONFIG 环境变量的凭证助手。一种方便的方法是将其全部烘焙到您的图像中。

因此,您的 gitlab-runner 映像应该包含 docker-credential-ecr-login 二进制文件(或者您应该从主机安装它)。

FROM gitlab/gitlab-runner:v14.3.2
COPY bin/docker-credential-ecr-login /usr/local/bin/docker-credential-ecr-login

然后当您调用 gitlab-runner register 时,使用 --env 标志传入 DOCKER_AUTH_CONFIG 环境变量,如下所示:

AUTH_ENV="DOCKER_AUTH_CONFIG={ \"credsStore\": \"ecr-login\" }"
gitlab-runner register \
  --non-interactive \
  ...
  --env "${AUTH_ENV}" \
  --env "AWS_SDK_LOAD_CONFIG=true" \
  ...

您也可以在 config.toml、实例 CI/CD 变量或设置 CI/CD 变量的任何地方(组、项目、yaml、触发器等)进行等效设置。

只要您的 EC2 实例(或 ECS 任务角色,如果 运行 gitlab-runner 作为 ECS 任务)有权拉取镜像,您的作业将能够从声明的 ECR 中拉取镜像在 image: 节中。

然而,这不一定会让您使用 docker-in-docker 自动拉取图像(例如,在作业的 script: 部分调用 docker pull)。这可以配置(因为看起来您已经在工作),但可能需要额外的设置,具体取决于您的运行器和 IAM 配置。