Невозможно нажать изображение на Amazon ECR - не удается "без базовых учетных данных"

Я пытаюсь вставить образ докера в реестр Amazon ECR. Я использую Docker-клиент Docker версии 1.9.1, сборка a34a1d5. Я использую "aws ecr get-login --region us-east-1", чтобы получить кредиты для входа в докер. Затем я успешно войти в систему с этими кредитами следующим образом:

docker login -u AWS -p XXXX -e none https://####.dkr.ecr.us-east-1.amazonaws.com
WARNING: login credentials saved in /Users/ar/.docker/config.json
Login Succeeded

Но когда я пытаюсь нажать на свое изображение, я получаю следующую ошибку:

$ docker push ####.dkr.ecr.us-east-1.amazonaws.com/image:latest
The push refers to a repository [####.dkr.ecr.us-east-1.amazonaws.com/image] (len: 1)
bcff5e7e3c7c: Preparing 
Post https://####.dkr.ecr.us-east-1.amazonaws.com/v2/image/blobs/uploads/: no basic auth credentials

Я убедился, что у пользователя aws были правильные разрешения. Я также позаботился о том, чтобы репозиторий позволил этому пользователю перейти на него. Просто чтобы убедиться, что это не проблема, я настроил реестр, чтобы предоставить всем пользователям полный доступ. Ничто не меняет ошибку "без базовых учетных данных". Я не знаю, как начать отлаживать это, поскольку весь трафик зашифрован.

ОБНОВИТЬ

Таким образом, у меня был небольшой момент Гомера Симпсона, когда я понял основную причину моей проблемы. У меня есть доступ к нескольким аккаунтам AWS. Несмотря на то, что я использовал aws configure, чтобы установить свои учетные данные для учетной записи, в которой я настраивал свой репозиторий, aws cli фактически использовал переменные среды AWS_ACCESS_KEY_ID и AWS_SECRET_ACCESS_KEY. Поэтому, когда я делал aws ecr get-login, он возвращал логин не той учетной записи. Я не заметил, что номера счетов были другими, пока не вернулся, чтобы попробовать некоторые из предложенных ответов. Когда я удаляю переменные окружения, все работает правильно. Я предполагаю, что девиз этой истории - если вы нажмете эту ошибку, убедитесь, что репозиторий, в который вы входите, соответствует тегу, который вы применили к изображению.

Ответ 1

если вы запустите $(aws ecr get-login --region us-east-1), все будет сделано для вас

Ответ 2

В моем случае это была ошибка с Docker для Windows и их поддержка диспетчера учетных данных Windows.

Откройте ~/.docker/config.json и удалите запись "credsStore": "wincred".

Это приведет к тому, что учетные данные будут записываться непосредственно в config.json. После этого вам придется снова войти в систему.

Вы можете отслеживать эту ошибку через билеты # 22910 и # 24968 на GitHub.

Ответ 3

Если вы используете профили, не забудьте передать --profile=XXX в aws ecr get-login.

Ответ 4

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

aws ecr get-login --region ap-southeast-2

Эта команда вернула большой blob, который включает в себя команду docker login прямо там! Я не понимал. Он должен возвращать что-то вроде этого:

docker login -u AWS -p <your_token_which_is_massive> -e none <your_aws_url>

Скопируйте и вставьте эту команду, а затем запустите команду push docker, которая выглядит примерно так:

docker push 8888888.blah.blah.ap-southwest-1.amazonaws.com/dockerfilename

Ответ 5

Это должно было работать даже без открытия разрешений. См. Документацию: Аутентификация частного реестра.

[Edit: на самом деле, у меня были проблемы с разрешениями при выполнении второго теста. См. Docker push to AWS ECR private repo с ошибкой с неправильным JSON).]

Тем не менее у меня была та же проблема; Я не знаю почему, но я успешно использовал более длинный механизм auth, описанный в документах для get-authorization-token

AWS CLI и версии Docker:

$ aws --version
aws-cli/1.9.17 Python/2.7.6 Linux/3.16.0-38-generic botocore/1.3.17
$ docker --version
Docker version 1.9.1, build a34a1d5

Получить токен аутентификации ( "пароль докера" ).

aws ecr get-authorization-token --region us-east-1 --output text \
    --query authorizationData[].authorizationToken | base64 -d | cut -d: -f2

Примечание. My ~/.aws/config указывает другую область по умолчанию, поэтому мне нужно было явно установить --region us-east-1.

Войдите в интерактивный режим (измените ############ на свой идентификатор учетной записи AWS):

docker login -u AWS https://############.dkr.ecr.us-east-1.amazonaws.com/
password: <paste the very long password from above>
email: <I left this blank>

Нажмите изображение (при условии, что вы сделали изображение докеры test):

docker tag test:latest ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
docker push ############.dkr.ecr.us-east-1.amazonaws.com/test:latest
The push refers to a repository [910732017890.dkr.ecr.us-east-1.amazonaws.com/test] (len: 1)
d5122f58a2e1: Pushed 
7bddbca3b908: Pushed 
latest: digest: sha256:bc0b521fd398bd1a2ef58a289dcb910334608723fd570e7bddb36eacd0060363 size: 4378

Ответ 6

Попробуйте:

eval $(aws ecr get-login --no-include-email | sed 's|https://||')

перед нажатием.

Ответ 7

Если это кому-то помогает...

Моя проблема заключалась в том, что мне пришлось использовать параметр --profile для проверки подлинности с помощью соответствующего профиля из файла учетных данных.

Затем я опустил команду --region [region_name], которая также выдала ошибку "нет основных ошибок авторизации".

Решение для меня изменило мою команду:

aws ecr get-login

Для этого:

aws --profile [profile_name] ecr get-login --region [region_name]

Пример:

aws --profile foo ecr get-login --region us-east-1

Надеюсь, что это поможет кому-то!

Ответ 8

Я испытал ту же проблему.

Создание новых учетных данных AWS (ключей доступа) и перенастройка AWS CLI с новыми учетными данными разрешили проблему.

Ранее, aws ecr get-login --region us-east-1 генерировал команду входа в докер с недопустимым URL-адресом реестра EC.

Ответ 9

Там известная ошибка в wincred credential manager в Windows. Удаление "https://" из сгенерированной команды входа разрешает это.

docker login -u AWS -p <password> <aws_account_id>.dkr.ecr.<region>.amazonaws.com

вместо

docker login -u AWS -p <password> https://<aws_account_id>.dkr.ecr.<region>.amazonaws.com

См. Также страницу устранения неполадок.

Ответ 10

  • Сначала убедитесь, что вы создали реестр ECR.
    Затем в соответствии с инструкциями ECR Push Command вырезать и вставлять следующие команды
  • Выполнение команды входа в докер (eval на Mac/Linux пропускает вырезку и вставку)
    eval $(aws ecr get-login --region us-east-1)
    add -profile, если вы используете несколько учетных записей AWS
    eval $(aws ecr get-login --region us-east-1 --profile your-profile)
  • docker build -t image-name .
  • docker tag image-name:latest ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest
  • docker push ############.dkr.ecr.us-east-1.amazonaws.com/image-name:latest

В случае ошибки убедитесь, что вы снова запустите все команды! Учетные данные, которые вы используете с помощью aws ecr get-login, являются временными и истекают.

Ответ 11

В моем случае после запуска aws ecr get-login --no-include-email --region *****, я просто скопировал вывод этой команды с docker login -u *** -p ************, и вы вставляете его в подсказку. Толчок пошел вперед.

Ответ 12

В документах AWS вам предлагается выполнить следующую команду (для региона ap-south-2)

aws ecr get-login --region ap-southeast-2

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

Исправление, с которым я работал, заключалось в том, чтобы скопировать результат в буфер обмена с помощью

aws ecr get-login --region ap-southeast-2 | pbcopy

Вставьте результат в командную строку и выполните его

Ответ 13

После запуска этой команды:

(aws ecr get-login --no-include-email --region us-west-2)

просто запустите команду входа в docker из вывода

docker login -u AWS -p epJ....

это способ входа в доклер в ECR

Ответ 14

У меня была эта проблема с другой причиной: мне нужно было нажать на реестр, не связанный с моей учетной записью AWS (реестр ECR клиента). Клиент предоставил мне доступ на вкладке "Разрешения" для реестра, добавив мой идентификатор IAM (например, arn:aws:iam::{AWS ACCT #}:user/{Username}) в качестве Принципала. Я попытался войти с обычными шагами:

$(aws ecr get-login --region us-west-2 --profile profilename)
docker push {Client AWS ACCT #}.dkr.ecr.us-west-1.amazonaws.com/imagename:latest

Что, конечно, привело к no basic auth credentials. Как выясняется, aws ecr get-login записывает вас в ECR для реестра, связанного с вашим логином, что имеет смысл в ретроспективе. Решение состоит в том, чтобы сообщить aws ecr get-login, какой реестр вы хотите войти.

$(aws ecr get-login --region us-west-2 --profile profilename --registry-ids {Client AWS ACCT #})

После этого docker push работает просто отлично.

Ответ 15

Команда docker, предоставляемая aws-cli, не очень удобна...

При использовании входа в Docker Docker сохранит пару сервер: ключ в вашей цепочке для ключей или в файле ~/.docker/config.json.

Если он сохраняет ключ в https://7272727.dkr.ecr.us-east-1.amazonaws.com поиск ключа во время push завершится неудачей, потому что docker будет искать сервер с именем 7272727.dkr.ecr.us-east-1.amazonaws.com не https://7272727.dkr.ecr.us-east-1.amazonaws.com.

Используйте следующую команду для входа в систему:

eval $(aws ecr get-login --no-include-email --region us-east-1 --profile yourprofile | sed 's|https://||')

Как только вы запустите команду, вы получите сообщение 'Login Succeeded' и тогда вы в порядке.
после этого ваша команда push должна работать

Ответ 16

В Windows в PowerShell используйте:

Invoke-Expression $(aws ecr get-login --no-include-email)

Ответ 17

Я столкнулся с этой проблемой и работал на OSX. Я увидел ответ Оливера Зальцбурга и проверил мой файл ~/.docker/config.json. У него было несколько учетных данных авторизации внутри него из разных учетных записей AWS. Я удалил файл и после запуска get-login снова работал.

Ответ 18

Я столкнулся с одной и той же проблемой, и ошибка, которую я совершил, заключалась в использовании неправильного пути репо

например: docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest

В приведенном выше пути это то, где я допустил ошибку: В "dkr.ecr.us-east-1.amazonaws.com" вместо "west". Я использовал "east". Как только я исправил свою ошибку, я смог успешно нажать изображение.

Ответ 19

Моя проблема заключалась в наличии нескольких учетных данных AWS; default и dev. Поскольку я пытался развернуть dev, это сработало:

$(aws ecr get-login --no-include-email --region eu-west-1 --profile dev | sed 's|https://||')

Ответ 20

FWIW, Debian 9, версия Docker 18.06.1-ce, build e68fc7a:

$(aws ecr get-login | sed 's| -e none | |g')

Ответ 21

Если вы используете несколько профилей, и вам нужно войти в профиль, который не является вашим по умолчанию, вам необходимо войти в систему с помощью этой команды:

$(AWS_PROFILE=<YOUR PROFILE> aws ecr get-login --no-include-email --region eu-west-1)

Ответ 22

мы также сталкиваемся с этой проблемой сегодня и попробовали все, что упоминалось в этом сообщении (кроме генерации учетных данных AWS).

Мы, наконец, решили проблему, просто обновив Docker, затем нажав кнопку.

Проблема столкнулась с Docker 1.10.x и была решена с помощью Docker 1.11.x.

Надеюсь, что это поможет

Ответ 23

Если вы изолируете учетные записи AWS для целей CI/CD и имеете один репозиторий ECR, общий для нескольких учетных записей AWS, вам может потребоваться изменить ~/.docker/config.json вручную.

Скажем, у вас есть следующие настройки:

  • ECR принадлежит идентификатору учетной записи AWS 00000000000000
  • Сервер CI принадлежит идентификатору учетной записи AWS 99999999999999

Если вы вызываете aws ecr get-login --region us-west-2 | bash на свой CI-сервер, докер будет генерировать временные учетные данные в ~/.docker/config.json.

{
  "auths": {
    "https://99999999999999.dkr.ecr.us-west-2.amazonaws.com": {
      "auth": "long-token.."
    }
  }
}

Но вы хотите указать на учетную запись ECR, поэтому вам нужно изменить имя хоста.

{
  "auths": {
    "https://00000000000000.dkr.ecr.us-west-2.amazonaws.com": {
      "auth": "long-token.."
    }
  }
}

Обратите внимание, что эта ситуация зависит от того, как вы формируете пользователя/политику IAM, чтобы разрешить доступ к ECR.

Ответ 24

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

http://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html

Фиксирование "нет базовой аутентификации" описано в ссылке

Ответ 25

Убедитесь, что вы используете правильный регион в aws ecr get-login, он должен соответствовать региону, в котором создан ваш репозиторий.

Ответ 26

aws ecr get-login --region us-west-1 --no-include-email

Эта команда дает мне правильную команду для входа в систему. Если вы не используете "--no-include-email", это вызовет другую ошибку. Вывод вышеуказанной команды выглядит так, как этот вход в докер-up AWS -p ********************** очень большой ******. Скопируйте это и выполните его. Теперь он покажет "Login Succeeded". Теперь вы можете подтолкнуть свое изображение к ECR.

Убедитесь, что ваше правило AMI имеет разрешение для пользователя, которого вы пытались войти в систему.

Ответ 27

Просто запустите все, что было возвращено на первом шаге, чтобы устранить проблему.

Ответ 28

Это сообщение об ошибке приходит из докера, и это не обязательно связано с AWS, поскольку я получил ту же ошибку, когда не использовал AWS... его просто говорит, что докер не получает авторизацию для перехода от любого источника auth, который он использует

В моем случае, в тесте, я удалил каталог ~/.docker и получил эту ошибку... после того, как я отбросил локальный реестр докеров, нажатие на докере было прекрасным.

Ответ 29

В моем случае (и, вероятно, во всех случаях) эта ошибка возникла из-за наличия нескольких учетных записей AWS. Таким образом, AWS ECR не использует правильные учетные данные aws, ассоциированные с учетной записью aws.

Я попробовал несколько решений, упомянутых здесь, но не удалось. Он работал после использования токенов вместо имени пользователя и пароля. Я получил его работу, следуя инструкциям здесь. https://btburnett.com/2017/01/docker-login-for-amazon-aws-ecr-using-windows-powershell.html

Ответ 30

Я добавляю регион, и все работает, тогда у меня все хорошо:

aws ecr get-login --no-include-email --region eu-west-3