Amazon web services Docker推送到AWS ECR私有回购失败,JSON格式错误

Amazon web services Docker推送到AWS ECR私有回购失败,JSON格式错误,amazon-web-services,docker,docker-toolbox,amazon-ecs,Amazon Web Services,Docker,Docker Toolbox,Amazon Ecs,我正在试用AWS ECR,并将一个新标签推到我们的私人仓库 事情是这样的: 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 $D

我正在试用AWS ECR,并将一个新标签推到我们的私人仓库

事情是这样的:

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图像看到它,但是推送失败了

The push refers to a repository [0123123123123.dkr.ecr.us-east-1.amazonaws.com/vendor/app-name] (len: 2)
b1a1d76b9e52: Pushing [==================================================>]     32 B/32 B
Error parsing HTTP response: unexpected end of JSON input: ""

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

遇到了相同的问题。对我来说,确保我正在推送的IAM用户已通过
ecr:BatchCheckLayerAvailability
权限清除了这一问题


我原本打算使用“仅推送”策略,但没有意识到成功推送需要此权限。

除了@Ethan的回答之外:我试图找到将docker映像推送到AWS注册表所需的最小权限集。截至今天,最小集为:

    {
        "Sid": "PushToEcr",
        "Effect": "Allow",
        "Action": [
            "ecr:BatchCheckLayerAvailability",
            "ecr:CompleteLayerUpload",
            "ecr:GetAuthorizationToken",
            "ecr:InitiateLayerUpload",
            "ecr:PutImage",
            "ecr:UploadLayerPart"
        ],
        "Resource": "*"
    }
据我所知,
资源
必须是
*
,因为有些操作在其他情况下不起作用。
欢迎改进

您需要的最小策略:

{
  "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>"
    }
  ]
}
{
“版本”:“2012-10-17”,
“声明”:[
{
“Sid”:“,
“效果”:“允许”,
“操作”:“ecr:GetAuthorizationToken”,
“资源”:“*”
},
{
“Sid”:“,
“效果”:“允许”,
“行动”:[
“ecr:上传LayerPart”,
“ecr:PutImage”,
“ecr:InitiateLayerUpload”,
“ecr:CompleteLayerUpload”,
“ecr:BatchCheckLayerAvailability”
],
“资源”:“arn:aws:ecr:::存储库/”
}
]
}

在“供应商”或“应用程序名称”中是否有特殊字符?(假设这些不是您正在使用的真实值)我会尝试一个没有连字符、下划线等的快速测试。我选择了与我们匹配的泛型,供应商是我们的公司名称(只有小写字母),应用程序名称在两个词之间有一个破折号。我刚试过vendor/appname,它的场景是一样的,Travis和Locally都会出现这种情况,那么版本呢?ECR使用RegistryV2,我认为它是在1.5版本引入docker的。客户机可能是1.4或更老版本吗?好主意,不幸的是:$docker-version docker version 1.8.1,现场构建D12EA79,谢谢!这个错误消息太糟糕了,尽管其中唯一需要*的是GetAuthorizationToken——剩下的*是合群的。