Ответ 1
если вы запустите $(aws ecr get-login --region us-east-1)
, все будет сделано для вас
Я пытаюсь вставить образ докера в реестр 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, он возвращал логин не той учетной записи. Я не заметил, что номера счетов были другими, пока не вернулся, чтобы попробовать некоторые из предложенных ответов. Когда я удаляю переменные окружения, все работает правильно. Я предполагаю, что девиз этой истории - если вы нажмете эту ошибку, убедитесь, что репозиторий, в который вы входите, соответствует тегу, который вы применили к изображению.
если вы запустите $(aws ecr get-login --region us-east-1)
, все будет сделано для вас
В моем случае это была ошибка с Docker для Windows и их поддержка диспетчера учетных данных Windows.
Откройте ~/.docker/config.json
и удалите запись "credsStore": "wincred"
.
Это приведет к тому, что учетные данные будут записываться непосредственно в config.json
. После этого вам придется снова войти в систему.
Вы можете отслеживать эту ошибку через билеты # 22910 и # 24968 на GitHub.
Если вы используете профили, не забудьте передать --profile=XXX
в aws ecr get-login
.
У меня тоже была эта проблема. Что случилось со мной, я забыл запустить команду, которая была возвращена мне после того, как я запустил
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
Это должно было работать даже без открытия разрешений. См. Документацию: Аутентификация частного реестра.
[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
Попробуйте:
eval $(aws ecr get-login --no-include-email | sed 's|https://||')
перед нажатием.
Если это кому-то помогает...
Моя проблема заключалась в том, что мне пришлось использовать параметр --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 (ключей доступа) и перенастройка AWS CLI с новыми учетными данными разрешили проблему.
Ранее, aws ecr get-login --region us-east-1
генерировал команду входа в докер с недопустимым URL-адресом реестра EC.
Там известная ошибка в 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
См. Также страницу устранения неполадок.
eval $(aws ecr get-login --region us-east-1)
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
, являются временными и истекают.
В моем случае после запуска aws ecr get-login --no-include-email --region *****
, я просто скопировал вывод этой команды с docker login -u *** -p ************
, и вы вставляете его в подсказку. Толчок пошел вперед.
В документах AWS вам предлагается выполнить следующую команду (для региона ap-south-2)
aws ecr get-login --region ap-southeast-2
Когда я столкнулся с этой проблемой, мне было непонятно, основываясь на этих документах, что вам нужно ввести результат этой команды в терминал и выполнить ее.
Исправление, с которым я работал, заключалось в том, чтобы скопировать результат в буфер обмена с помощью
aws ecr get-login --region ap-southeast-2 | pbcopy
Вставьте результат в командную строку и выполните его
После запуска этой команды:
(aws ecr get-login --no-include-email --region us-west-2)
просто запустите команду входа в docker из вывода
docker login -u AWS -p epJ....
это способ входа в доклер в ECR
У меня была эта проблема с другой причиной: мне нужно было нажать на реестр, не связанный с моей учетной записью 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
работает просто отлично.
Команда 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 должна работать
В Windows в PowerShell используйте:
Invoke-Expression $(aws ecr get-login --no-include-email)
Я столкнулся с этой проблемой и работал на OSX. Я увидел ответ Оливера Зальцбурга и проверил мой файл ~/.docker/config.json. У него было несколько учетных данных авторизации внутри него из разных учетных записей AWS. Я удалил файл и после запуска get-login снова работал.
Я столкнулся с одной и той же проблемой, и ошибка, которую я совершил, заключалась в использовании неправильного пути репо
например: docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest
В приведенном выше пути это то, где я допустил ошибку: В "dkr.ecr.us-east-1.amazonaws.com"
вместо "west"
. Я использовал "east"
. Как только я исправил свою ошибку, я смог успешно нажать изображение.
Моя проблема заключалась в наличии нескольких учетных данных AWS; default и dev. Поскольку я пытался развернуть dev, это сработало:
$(aws ecr get-login --no-include-email --region eu-west-1 --profile dev | sed 's|https://||')
FWIW, Debian 9, версия Docker 18.06.1-ce, build e68fc7a:
$(aws ecr get-login | sed 's| -e none | |g')
Если вы используете несколько профилей, и вам нужно войти в профиль, который не является вашим по умолчанию, вам необходимо войти в систему с помощью этой команды:
$(AWS_PROFILE=<YOUR PROFILE> aws ecr get-login --no-include-email --region eu-west-1)
мы также сталкиваемся с этой проблемой сегодня и попробовали все, что упоминалось в этом сообщении (кроме генерации учетных данных 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/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.
Вы должны убедиться, что вы вошли в систему, используя правильные учетные данные, см. официальное описание ошибки и здесь проверите
http://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html
Фиксирование "нет базовой аутентификации" описано в ссылке
Убедитесь, что вы используете правильный регион в aws ecr get-login
, он должен соответствовать региону, в котором создан ваш репозиторий.
aws ecr get-login --region us-west-1 --no-include-email
Эта команда дает мне правильную команду для входа в систему. Если вы не используете "--no-include-email", это вызовет другую ошибку. Вывод вышеуказанной команды выглядит так, как этот вход в докер-up AWS -p ********************** очень большой ******. Скопируйте это и выполните его. Теперь он покажет "Login Succeeded". Теперь вы можете подтолкнуть свое изображение к ECR.
Убедитесь, что ваше правило AMI имеет разрешение для пользователя, которого вы пытались войти в систему.
Просто запустите все, что было возвращено на первом шаге, чтобы устранить проблему.
Это сообщение об ошибке приходит из докера, и это не обязательно связано с AWS, поскольку я получил ту же ошибку, когда не использовал AWS... его просто говорит, что докер не получает авторизацию для перехода от любого источника auth, который он использует
В моем случае, в тесте, я удалил каталог ~/.docker и получил эту ошибку... после того, как я отбросил локальный реестр докеров, нажатие на докере было прекрасным.
В моем случае (и, вероятно, во всех случаях) эта ошибка возникла из-за наличия нескольких учетных записей AWS. Таким образом, AWS ECR не использует правильные учетные данные aws, ассоциированные с учетной записью aws.
Я попробовал несколько решений, упомянутых здесь, но не удалось. Он работал после использования токенов вместо имени пользователя и пароля. Я получил его работу, следуя инструкциям здесь. https://btburnett.com/2017/01/docker-login-for-amazon-aws-ecr-using-windows-powershell.html
Я добавляю регион, и все работает, тогда у меня все хорошо:
aws ecr get-login --no-include-email --region eu-west-3