Я пытаюсь вставить образ докера в реестр 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 были правильные разрешения. Я также позаботился о том, чтобы репозиторий позволил этому пользователю перейти на него. Просто чтобы убедиться, что это не проблема, я настроил реестр, чтобы предоставить всем пользователям полный доступ. Ничто не меняет "no basic auth credentials"
ошибку. Я не знаю, как начать отлаживать это, так как весь трафик зашифрован.
ОБНОВИТЬ
Так что у меня был момент Гомера Симпсона Д'О, когда я понял основную причину моей проблемы. У меня есть доступ к нескольким аккаунтам AWS. Даже при том, что я использовал, aws configure
чтобы установить свои учетные данные для учетной записи, где я настроил свой репозиторий, aws cli фактически использовал переменные среды AWS_ACCESS_KEY_ID
и AWS_SECRET_ACCESS_KEY
. Поэтому, когда я aws ecr get-login
это делал, возвращался логин для неправильной учетной записи. Я не заметил, что номера счетов были другими, пока не вернулся, чтобы попробовать некоторые из предложенных ответов. Когда я удаляю переменные окружения, все работает правильно. Я предполагаю, что девиз этой истории - если вы нажмете эту ошибку, убедитесь, что репозиторий, в который вы входите, соответствует тегу, который вы применили к изображению.
источник
Ответы:
если вы запустите,
$(aws ecr get-login --region us-east-1)
все будет сделано за васисточник
docker login
команда будет выполнена.В моем случае это была ошибка в Docker для Windows и их поддержке диспетчера учетных данных Windows.
Откройте свой
~/.docker/config.json
и удалите"credsStore": "wincred"
запись.Это приведет к тому, что учетные данные будут записаны
config.json
напрямую. Вы должны будете войти снова после этого.Вы можете отследить эту ошибку через билеты # 22910 и # 24968 на GitHub.
источник
~/.docker
означает.docker
в вашем домашнем каталоге. Попробуйте%HOMEDRIVE%%HOMEPATH%\.docker
Если вы используете профили, не забудьте перейти
--profile=XXX
наaws ecr get-login
.источник
У меня тоже была эта проблема. Что случилось со мной, я забыл выполнить команду, которая была возвращена мне после того, как я побежал
Эта команда вернула большой двоичный объект, который включает в себя
docker login
команду прямо здесь! Я не поняла Он должен вернуть что-то вроде этого:Скопируйте и вставьте эту команду, а затем запустите команду Docker push, которая выглядит примерно так:
источник
Это должно было работать даже без открытия разрешений. Смотрите документацию: Аутентификация частного реестра .
[Правка: на самом деле, у меня тоже были проблемы с разрешениями при выполнении второго теста. Посмотрите, как Docker подталкивает к неудачному закрытому репозиторию AWS ECR с искаженным JSON ).]
Тем не менее у меня была та же проблема; Я не знаю почему, но я успешно использовал более сложный механизм аутентификации, описанный в документации для get-authorization-token
Версии AWS CLI и Docker:
Получить токен авторизации («пароль докера»).
Примечание: мой ~ / .aws / config указывает другой регион по умолчанию, поэтому мне нужно было явно установить
--region us-east-1
.Войдите в систему в интерактивном режиме (измените
############
свой идентификатор учетной записи AWS):Нажмите на изображение (при условии, что вы сделали изображение докера
test
):источник
aws ecr get-authorization-token > config.json
а затем открыть его в своем любимом текстовом редакторе, чтобы скопировать и вставить по желаниюПопробуйте с:
до толчка.
источник
no basic auth credentials Invalid IPv6 URL
Обновить
Поскольку AWS CLI версии 2 -
aws ecr get-login
устарел и правильный методaws ecr get-login-password
.Поэтому правильный и обновленный ответ следующий:
docker login -u AWS -p $(aws ecr get-login-password --region us-east-1) xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com
источник
unknown flag: --region
Если это кому-нибудь поможет ...
Моя проблема заключалась в том, что мне пришлось использовать эту
--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
Надеюсь, что это помогает кому-то!
источник
AWS_PROFILE=myprofile aws ecr get-login
и это не сработало, но введение профиля aws с--profile
аргументом делает хитрость!Существует известная ошибка в диспетчере учетных данных wincred в Windows. Удаление https: // из сгенерированной команды входа решает эту проблему.
вместо того
Смотрите также страницу устранения неполадок .
источник
Я испытал ту же проблему.
Создание новых учетных данных AWS (ключей доступа) и перенастройка интерфейса командной строки AWS с новыми учетными данными позволили решить эту проблему.
Ранее
aws ecr get-login --region us-east-1
сгенерированная команда входа в Docker с недействительным URL-адресом реестра EC.источник
В Windows в PowerShell используйте:
источник
У меня возникла эта проблема по другой причине: мне нужно было перейти в реестр, не связанный с моей учетной записью AWS (реестр ECR клиента). Клиент предоставил мне доступ на вкладке «Разрешения» для реестра, добавив мой идентификатор IAM (например,
arn:aws:iam::{AWS ACCT #}:user/{Username}
) в качестве принципала. Я попытался войти с обычными шагами:Что, конечно, привело к
no basic auth credentials
. Как выясняется ,aws ecr get-login
регистрирует вас в ECR для реестра, связанного с вашим логином , что имеет смысл задним числом. Решение состоит в том, чтобы указать, вaws ecr get-login
какой реестр (ы) вы хотите войти.После этого
docker push
работает просто отлично.источник
--profile
? У меня есть личный аккаунт, но я пытаюсь перейти на корпоративный аккаунт. Другими словами, где я могу найтиprofilename
Затем, в соответствии с инструкциями команды ECR Push, вырежьте и вставьте следующие команды
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
являются временными и истекают.источник
your-profile
?~/.aws/config
и~/.aws/credentials
файлах.В моем случае после запуска
aws ecr get-login --no-include-email --region *****
я просто скопировал вывод этой команды в видеdocker login -u *** -p ************
, и вы вставили его в подсказку. Толчок пошел вперед.источник
Документы AWS говорят вам выполнить следующую команду (для региона ap-southeast-2)
Когда я столкнулся с этой проблемой, мне не было понятно, исходя из этих документов, что вам нужно ввести результат этой команды в терминал и выполнить его.
Исправление, которое работало для меня, было копировать результат в буфер обмена с
Вставьте результат в командную строку и выполните его
источник
После запуска этой команды:
(aws ecr get-login --no-include-email --region us-west-2)
просто запустите команду docker login из вывода
docker login -u AWS -p epJ....
способ входа Docker в ECR
источник
Эта ошибка обычно выдается, если сбой входа в систему ecr. Я использую систему Windows, и я использовал «Powershell» в режиме администратора, чтобы войти в систему, чтобы начать сначала.
Это должно вывести «Войти успешно».
источник
Я столкнулся с той же самой проблемой, и ошибка, которую я сделал, использовала неправильный путь репо
например:
docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest
В вышеупомянутом пути я совершил ошибку:
"dkr.ecr.us-east-1.amazonaws.com"
вместо"west"
. Я использовал "east"
. Как только я исправил свою ошибку, я смог успешно нажать на изображение.источник
Команда 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
nothttps://7272727.dkr.ecr.us-east-1.amazonaws.com
.Используйте следующую команду для входа в систему:
После того, как вы запустите команду, вы получите
'Login Succeeded'
сообщение, и после этого у вас всеполучится.
источник
Существует очень простой способ передачи образов докеров в ECR: Amazon ECR Docker Credential Helper . Просто установите его в соответствии с предоставленным руководством, обновите
~/.docker/config.json
его следующим образом:и вы сможете нажимать / тянуть свои изображения без
docker login
.источник
Я столкнулся с этой проблемой, а также работает на OSX. Я увидел ответ Оливера Зальцбурга и проверил мой ~ / .docker / config.json. Внутри него было несколько учетных данных авторизации от разных учетных записей AWS, которые у меня есть. Я удалил файл и после запуска get-login он снова заработал.
источник
Убедитесь, что вы используете правильный регион
aws ecr get-login
, он должен совпадать с регионом, в котором создается ваш репозиторий.источник
У меня была проблема с несколькими учетными данными AWS; по умолчанию и dev. Так как я пытался развернуть в dev это сработало:
источник
FWIW, Debian 9, Docker версия 18.06.1-ce, сборка e68fc7a:
$(aws ecr get-login | sed 's| -e none | |g')
источник
Если вы используете несколько профилей и вам нужно войти в профиль, который не является профилем по умолчанию, вам необходимо войти в систему с помощью этой команды:
источник
У меня работает следующая команда:
И тогда я запускаю эти команды:
источник
Мы также столкнулись с этой проблемой сегодня и перепробовали все, что упомянуто в этом посте (кроме генерации учетных данных AWS).
Мы, наконец, решили проблему, просто обновив Docker, и тогда сработало.
Проблема возникла с Docker 1.10.x и была решена с помощью Docker 1.11.x.
Надеюсь это поможет
источник
Если вы изолируете Учетные записи AWS для целей CI / CD и имеете один репозиторий ECR, общий для нескольких учетных записей AWS, возможно, вам придется изменить
~/.docker/config.json
вручную.Допустим, у вас есть эти настройки:
00000000000000
99999999999999
Если вы позвоните
aws ecr get-login --region us-west-2 | bash
в свой CI-сервер, Docker сгенерирует временные учетные данные в~/.docker/config.json
.Но вы хотите указать на учетную запись ECR, поэтому вам нужно изменить имя хоста.
Обратите внимание, что эта ситуация зависит от того, как вы формируете пользователя / политику IAM для предоставления доступа к ECR.
источник
Вы должны убедиться, что вы вошли в систему, используя правильные учетные данные. См. Официальное описание ошибки и проверки здесь.
http://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html
Исправление "нет базовой аутентификации" описано в ссылке
источник
Эта команда дает мне правильную команду для входа в систему. Если вы не используете «--no-include-email», это вызовет еще одну ошибку. Выходные данные вышеупомянутой команды выглядят так: вход в докер -u AWS -p ********************** очень большой ******. Скопируйте это и выполните это. Теперь он покажет «Войти успешно». Теперь вы можете перенести свое изображение в ECR.
Убедитесь, что ваше правило AMI имеет разрешение для пользователя, которого вы пытались войти.
источник