Docker подталкивает к неудачному закрытому репо AWS ECR с искаженным JSON

Я пробую 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 images, но толчок терпит неудачу загадочно.

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: ""

Вполне возможно, что это неправильная конфигурация, но я не могу понять, как извлечь из этого больше информации. У команды нет параметров уровня отладки, других журналов нет, и я не могу перехватить сетевой трафик, так как он кажется зашифрованным.

4 ответа

Решение

Столкнулся с той же проблемой. Для меня, гарантируя, что пользователь IAM, которого я нажимал, имел ecr:BatchCheckLayerAvailability разрешение прояснило это.

Первоначально я намеревался иметь политику "только для нажатия" и не понимал, что это разрешение требуется для успешного продвижения.

Минимальная необходимая политика:

{
  "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>"
    }
  ]
}

В дополнение к ответу @Ethan: я попытался найти минимальный набор разрешений, необходимых для отправки образа докера в реестр AWS. На сегодняшний день минимальный набор составляет:

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

Насколько я понял Resource должно быть *потому что некоторые из этих действий иначе не работают. Улучшения приветствуются!

Если у вас есть папка виртуальной среды, моя была.venv, попробуйте удалить его. Снова создайте и отправьте свое изображение. Это сработало для меня

Другие вопросы по тегам