10

我已经在 SourceAccount 的 ECR 存储库中推送了一个 docker 图像。

我在 SourceAccount 中部署了一个代码管道。

当该代码管道运行时,它会在 TargetAccount 中部署 ECS 堆栈。在该堆栈中,ECS 任务是使用来自 SourceAccount 的上述图像使用容器创建的。但是,这些任务仍处于未决状态并最终进入停止状态。他们显示以下错误:

Status reason   CannotPullContainerError: Error response from daemon: pull access denied for <SourceAccountId>.dkr.ecr.<Region>.amazonaws.com/<RepoName>, repository does not exist or may require 'docker login'

请告知如何从 SourceAccount ECR 中提取图像并在 TargetAccount 中创建 ECS 任务。

笔记:

1)当我在 TargetAccount 的 ECR 中推送相同的图像时,一切正常。ECS 任务仅在尝试从其他帐户拉取图像时无法运行。

2)堆栈回滚并出现以下错误:

Service arn:aws:ecs:<Region>:<TargetAccount>:service/<ServiceName> did not stabilize.
4

2 回答 2

4

https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-pull-ecr-image.html中所述,您需要在使用时指定 AWS 账户 ID docker pull

docker pull aws_account_id.dkr.ecr.us-west-2.amazonaws.com/amazonlinux:latest

于 2020-01-29T03:10:03.323 回答
3

我通过将以下策略添加到 SourceAccount 中的 ECR 存储库来修复它:

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "AllowCrossAccountPull",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<TargetAccount>:root"
      },
      "Action": "ecr:*"
    }
  ]
}
于 2020-01-29T13:35:05.700 回答