Docker推送到AWS ECR私有仓库失败,格式错误的JSON

时间:2015-12-22 20:22:08

标签: amazon-web-services docker docker-toolbox amazon-ecs

我正在尝试使用AWS ECR并将新标记推送到我们的私人存储库。

它是这样的:

<form>

登录有效,标签已创建,我用export DOCKER_REGISTRY=0123123123123.dkr.ecr.us-east-1.amazonaws.com export TAG=0.1 docker build -t vendor/app-name . `aws ecr get-login --region us-east-1`" # generates docker login docker tag vendor/app-name $DOCKER_REGISTRY/vendor/app-name:$TAG docker push $DOCKER_REGISTRY/vendor/app-name:$TAG 看到它,但推送失败了。

docker images

很可能是配置错误,但我无法弄清楚如何从中获得更多输出。该命令没有调试级别选项,没有其他日志,我无法拦截网络流量,因为它似乎已加密。

3 个答案:

答案 0 :(得分:25)

陷入同样的​​问题。对我来说,确保我正在推动的IAM用户具有ecr:BatchCheckLayerAvailability权限已经清除了这一点。

我原本打算有一个&#34;只推送&#34;政策并没有意识到这个许可是成功推动所必需的。

答案 1 :(得分:3)

除了@Ethan的答案:我试图找到将Docker映像推送到AWS注册表所需的最小权限集。截至今天,最小集合是:

    {
        "Sid": "PushToEcr",
        "Effect": "Allow",
        "Action": [
            "ecr:BatchCheckLayerAvailability",
            "ecr:CompleteLayerUpload",
            "ecr:GetAuthorizationToken",
            "ecr:InitiateLayerUpload",
            "ecr:PutImage",
            "ecr:UploadLayerPart"
        ],
        "Resource": "*"
    }

据我了解,Resource必须为*,因为其中某些操作否则无法正常工作。 欢迎改进!

答案 2 :(得分:3)

您需要的最低政策:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Action": "ecr:GetAuthorizationToken",
      "Resource": "*"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Action": [
        "ecr:UploadLayerPart",
        "ecr:PutImage",
        "ecr:InitiateLayerUpload",
        "ecr:CompleteLayerUpload",
        "ecr:BatchCheckLayerAvailability"
      ],
      "Resource": "arn:aws:ecr:<your region>:<your account id>:repository/<your repository name>"
    }
  ]
}