我正在使用 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.AccessKeyID
和 AWS.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/