如果 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 配置。
我已经在我们的 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 配置。