amazon-web-services - 由于身份验证,AWS ECR 推送在 Azure DevOps 上失败

标签 amazon-web-services azure docker azure-devops amazon-ecr

我正在使用 Azure DevOps 管道进行 CI/CD。我正在尝试 Dockerize 并将我的 docker 镜像推送到 AWS ECR。我已经在 Azure Devops 上添加了 Docker 注册表(并且可以访问所有管道),我创建并使用了具有AdministrativeAccess 的 IAM 用户,并向 Azure Devops 添加了凭据。但是,在我的 Docker Push 任务中,我收到 unauthorized:authentication required 错误,并且我的工作失败。 这是我的推送任务

          - task: Docker@2
            displayName: "PUSH IMAGE TO AWS"
            inputs:
              containerRegistry: AWS
              repository: $(DOCKER_REPOSITORY_NAME)
              command: push
            enabled: true

最佳答案

IAM 用户无法直接登录 AWS ECR。您需要使用 AWS.AccessKeyIDAWS.SecretAccessKey 获取 Docker 身份验证 token 才能登录 AWS ECR。请参阅this document .

有两种解决方法可以将 docker 镜像推送到 AWS ECR。

1,如果您像您一样在azure pipeline中使用Docker任务。您需要添加一个脚本任务来获取身份验证 token 并首先登录 AWS ECR。见下文:

steps:
- script: |
    aws ecr get-login-password --region $(AWS_REGION) | docker login --username AWS --password-stdin $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com
  displayName: 'Login to AWS'
  env:
    AWS_ACCESS_KEY_ID: $(AWS_ACCESS_KEY_ID)
    AWS_SECRET_ACCESS_KEY: $(AWS_SECRET_ACCESS_KEY)

- task: Docker@2
  displayName: Build docker image
  inputs:
    repository: $(DOCKER_REPOSITORY)
    command: buildAndPush

详细步骤请查看this blog .

2、更方便的解决方法是使用AWS Toolkit for Azure DevOps (Amazon ECR Push任务)。该任务将自动获取身份验证 token 并登录 docker 客户端。因此,在构建镜像后,您可以使用此任务将其推送到 Amazon ECR。

要使用 Amazon ECR 推送任务,您需要创建服务连接(类型为 AWS)。

参见this thread了解更多信息。

关于amazon-web-services - 由于身份验证,AWS ECR 推送在 Azure DevOps 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65021027/

相关文章:

amazon-web-services - 如何导入一个 CloudFormation 堆栈并引用另一堆栈上资源的最新版本?

linux - AWS ec2 根卷增加 : Expanding elastic root volume on aws ubuntu instance not working

java - 如何从 Java 中的另一个 aws lambda 调用 aws lambda 函数?

docker - 如何杀死 docker-compose 生成的容器?

docker - 应该使用哪个 Docker 基础镜像在容器中安装应用程序而无需任何额外的操作系统?

postgresql - AWS RDS Postgresql 连接不提供证书

Azure Graph API 触发 2FA/MFA 身份验证请求

python - Azure Api 和 ChatGPT 的问题 (python)

python - 如何使用现有的 conda 环境作为 AzureML 环境

docker - 失败和除非已停止之间的docker重新启动策略差异?