Próbuję przesłać obraz dockera do rejestru Amazon ECR. Używam klienta Docker Docker w wersji 1.9.1, build a34a1d5
. Używam, aws ecr get-login --region us-east-1
aby uzyskać dane logowania do platformy Docker. Następnie pomyślnie loguję się za pomocą tych danych w następujący sposób:
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
Ale kiedy próbuję przesłać mój obraz, pojawia się następujący błąd:
$ 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
Upewniłem się, że użytkownik aws ma odpowiednie uprawnienia. Upewniłem się również, że repozytorium zezwala temu użytkownikowi na push. Aby upewnić się, że to nie problem, ustawiłem rejestr tak, aby umożliwić wszystkim użytkownikom pełny dostęp. Nic nie zmienia "no basic auth credentials"
błędu. Nie wiem, jak zacząć to debugować, ponieważ cały ruch jest szyfrowany.
AKTUALIZACJA
Więc przeżyłem chwilę Homera Simpsona D'Oh, kiedy zdałem sobie sprawę z pierwotnej przyczyny mojego problemu. Mam dostęp do wielu kont AWS. Mimo że używałem aws configure
do ustawiania moich poświadczeń dla konta, na którym skonfigurowałem moje repozytorium, aws cli faktycznie korzystało ze zmiennych środowiskowych AWS_ACCESS_KEY_ID
i AWS_SECRET_ACCESS_KEY
. Więc kiedy to zrobiłem aws ecr get-login
, zwracałem login do niewłaściwego konta. Nie zauważyłem, że numery kont są różne, dopóki nie wróciłem teraz, aby wypróbować niektóre z proponowanych odpowiedzi. Kiedy usuwam zmienne środowiskowe, wszystko działa poprawnie. Wydaje mi się, że motto tej historii brzmi: jeśli trafisz na ten błąd, upewnij się, że repozytorium, do którego się logujesz, pasuje do tagu, który zastosowałeś do obrazu.
źródło
Odpowiedzi:
jeśli będziesz biegać,
$(aws ecr get-login --region us-east-1)
wszystko będzie zrobione za Ciebieźródło
docker login
polecenie zostanie wykonane.W moim przypadku był to błąd związany z Docker for Windows i ich obsługą dla Windows Credential Manager.
Otwórz
~/.docker/config.json
i usuń"credsStore": "wincred"
wpis.Spowoduje to zapisanie poświadczeń
config.json
bezpośrednio do. Potem będziesz musiał się ponownie zalogować.Możesz śledzić ten błąd za pomocą zgłoszeń nr 22910 i # 24968 na GitHub.
źródło
~/.docker
oznacza.docker
w twoim katalogu domowym. Spróbuj%HOMEDRIVE%%HOMEPATH%\.docker
Jeśli używasz profili, nie zapomnij przejść
--profile=XXX
doaws ecr get-login
.źródło
Ja też miałem ten problem. To, co się ze mną stało, to to, że zapomniałem uruchomić polecenia, które wróciło do mnie po uruchomieniu
To polecenie zwróciło duży obiekt blob, który zawiera
docker login
polecenie właśnie tam! Nie zdawałem sobie sprawy. Powinien zwrócić coś takiego:Skopiuj i wklej to polecenie, a następnie uruchom polecenie docker push, które wygląda mniej więcej tak:
źródło
Powinno to zadziałać nawet bez otwierania uprawnień. Zobacz dokumentację: Uwierzytelnianie rejestru prywatnego .
[Edytuj: tak naprawdę, miałem też problemy z uprawnieniami podczas wykonywania drugiego testu. Zobacz wypychanie platformy Docker do prywatnego repozytorium AWS ECR niepowodzeniem z powodu nieprawidłowego formatu JSON ).]
Niemniej jednak miałem ten sam problem; Nie wiem dlaczego, ale z powodzeniem użyłem bardziej długiego mechanizmu uwierzytelniania opisanego w dokumentacji dla get-authorisation token
Wersje AWS CLI i Docker:
Uzyskaj token uwierzytelniania („hasło docker”).
Uwaga: Mój ~ / .aws / config określa inny domyślny region, więc musiałem jawnie ustawić
--region us-east-1
.Zaloguj się interaktywnie (zmień
############
swój identyfikator konta AWS):Wypchnij obraz (zakładając, że utworzyłeś obraz dockera
test
):źródło
aws ecr get-authorization-token > config.json
a następnie otworzyć go w swoim ulubionym edytorze tekstu, aby kopiować i wklejać do woliSpróbuj z:
przed pchnięciem.
źródło
no basic auth credentials Invalid IPv6 URL
Aktualizacja
Od wersji AWS CLI 2 -
aws ecr get-login
jest przestarzała, a poprawną metodą jestaws ecr get-login-password
.Dlatego poprawna i zaktualizowana odpowiedź jest następująca:
docker login -u AWS -p $(aws ecr get-login-password --region us-east-1) xxxxxxxx.dkr.ecr.us-east-1.amazonaws.com
źródło
unknown flag: --region
Jeśli to komuś pomoże ...
Mój problem polegał na tym, że musiałem skorzystać z
--profile
opcji, aby uwierzytelnić się za pomocą odpowiedniego profilu z pliku poświadczeń.Następnie ominąłem
--region [region_name]
polecenie, które również powodowało błąd „brak podstawowych danych uwierzytelniających”.Rozwiązaniem dla mnie była zmiana polecenia z tego:
aws ecr get-login
Do tego:
aws --profile [profile_name] ecr get-login --region [region_name]
Przykład:
aws --profile foo ecr get-login --region us-east-1
Mam nadzieję, że to komuś pomoże!
źródło
AWS_PROFILE=myprofile aws ecr get-login
i to nie zadziałało, ale wprowadzenie profilu aws z--profile
argumentem sprawia, że cała sprawa !W menedżerze poświadczeń wincred w systemie Windows występuje znany błąd. Usunięcie „https: //” z wygenerowanego polecenia logowania rozwiązuje ten problem.
zamiast
Zobacz także stronę rozwiązywania problemów .
źródło
Doświadczyłem tego samego problemu.
Wygenerowanie nowych poświadczeń AWS (kluczy dostępu) i rekonfiguracja interfejsu wiersza polecenia AWS z nowymi poświadczeniami rozwiązało problem.
Wcześniej
aws ecr get-login --region us-east-1
wygenerowano polecenie logowania do platformy docker z nieprawidłowym adresem URL rejestru WE.źródło
W systemie Windows w programie PowerShell użyj:
źródło
Miałem ten problem z inną przyczyną: musiałem wysłać do rejestru niezwiązanego z moim kontem AWS (rejestr klienta ECR). Klient udzielił mi dostępu na karcie Uprawnienia do rejestru, dodając mój identyfikator IAM (np.
arn:aws:iam::{AWS ACCT #}:user/{Username}
) Jako zleceniodawcę. Próbowałem się zalogować, wykonując zwykłe czynności:Co oczywiście zaowocowało
no basic auth credentials
. Jak się okazuje ,aws ecr get-login
loguje Cię do ECR dla rejestru powiązanego z Twoim loginem , co ma sens z perspektywy czasu. Rozwiązaniem jest wskazanie, doaws ecr get-login
których rejestrów chcesz się zalogować.Potem
docker push
działa dobrze.źródło
--profile
? Mam konto osobiste, ale próbuję przekazać dane na konto firmowe. Innymi słowy, gdzie znajdęprofilename
Następnie zgodnie z instrukcjami wypychania poleceń ECR wytnij i wklej następujące polecenia
eval $(aws ecr get-login --region us-east-1)
add --profile, jeśli używasz wielu kont 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
W przypadku błędu upewnij się, że ponownie wykonałeś wszystkie polecenia! Poświadczenia, których używasz,
aws ecr get-login
są tymczasowe i wygasną.źródło
your-profile
?~/.aws/config
i~/.aws/credentials
.W moim przypadku po uruchomieniu
aws ecr get-login --no-include-email --region *****
właśnie skopiowałem dane wyjściowe tego polecenia z formądocker login -u *** -p ************
i wklejasz je w zachęcie. Parcie szło naprzód.źródło
Dokumenty AWS mówią, aby wykonać następujące polecenie (dla regionu ap-południowy wschód-2)
Kiedy natknąłem się na ten problem, nie było dla mnie jasne na podstawie tych dokumentów, że musisz wprowadzić wynik tego polecenia do terminala i wykonać go.
Naprawa, która działała dla mnie, polegała na skopiowaniu wyniku do schowka za pomocą
Wklej wynik do wiersza poleceń i wykonaj go
źródło
Po uruchomieniu tego polecenia:
(aws ecr get-login --no-include-email --region us-west-2)
po prostu uruchom polecenie docker login z danych wyjściowych
docker login -u AWS -p epJ....
to sposób, w jaki docker loguje się do ECR
źródło
Ten błąd jest generalnie generowany, jeśli logowanie ecr nie powiodło się. Używam systemu Windows i użyłem „Powershell” w trybie administratora, aby najpierw zalogować się do ecr.
Powinno to spowodować wyświetlenie komunikatu „Logowanie powiodło się”.
źródło
Napotkałem ten sam problem i błąd, który popełniłem, polegał na użyciu niewłaściwej ścieżki repo
na przykład:
docker push xxxxxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/jenkins:latest
Na powyższej ścieżce popełniłem błąd: w
"dkr.ecr.us-east-1.amazonaws.com"
zamiast"west"
. Używałemeast"
. ” Po poprawieniu błędu udało mi się pomyślnie przesunąć obraz.źródło
Polecenie docker podane przez aws-cli jest trochę niedostępne ...
Używając logowania docker, docker zapisze parę server: key w twoim pęku kluczy lub w pliku ~ / .docker / config.json
Jeśli zapisze klucz w
https://7272727.dkr.ecr.us-east-1.amazonaws.com
wyszukiwaniu klucza podczas wypychania, zakończy się niepowodzeniem, ponieważ docker będzie szukał serwera o nazwie7272727.dkr.ecr.us-east-1.amazonaws.com
niehttps://7272727.dkr.ecr.us-east-1.amazonaws.com
.Użyj następującego polecenia, aby się zalogować:
Po uruchomieniu polecenia otrzymasz
'Login Succeeded'
wiadomość i wtedy są dobrepo że komenda Push powinno działać
źródło
Istnieje bardzo prosty sposób przesyłania obrazów dockera do ECR: Amazon ECR Docker Credential Helper . Po prostu zainstaluj go zgodnie z dostarczonym przewodnikiem, zaktualizuj
~/.docker/config.json
w następujący sposób:i będziesz mógł przesuwać / wyciągać obrazy bez
docker login
.źródło
Napotkałem ten problem również na OSX. Widziałem odpowiedź Olivera Salzburga i sprawdziłem mój plik ~ / .docker / config.json. Zawierał wiele poświadczeń autoryzacyjnych z różnych kont AWS, które mam. Usunąłem plik i po ponownym uruchomieniu get-login zadziałało.
źródło
Upewnij się, że używasz właściwego regionu w
aws ecr get-login
, musi on odpowiadać regionowi, w którym zostało utworzone repozytorium.źródło
Mój problem polegał na posiadaniu wielu poświadczeń AWS; default i dev. Ponieważ próbowałem wdrożyć program, zadziałało:
źródło
FWIW, Debian 9, Docker wersja 18.06.1-ce, kompilacja e68fc7a:
$(aws ecr get-login | sed 's| -e none | |g')
źródło
Jeśli używasz wielu profili i chcesz zalogować się do profilu, który nie jest Twoim domyślnym, musisz zalogować się za pomocą tego polecenia:
źródło
Działa dla mnie następujące polecenie:
Następnie uruchamiam te polecenia:
źródło
również dzisiaj napotykamy ten problem i próbowaliśmy wszystkiego, o czym wspomniano w tym poście (oprócz generowania poświadczeń AWS).
W końcu rozwiązaliśmy problem, po prostu uaktualniając Dockera, a następnie polecenie zadziałało.
Problem wystąpił w Docker 1.10.x i został rozwiązany w Docker 1.11.x.
Mam nadzieję że to pomoże
źródło
Jeśli izolujesz konta AWS do celów CI / CD i masz jedno repozytorium ECR współużytkowane przez wiele kont AWS, może być konieczna
~/.docker/config.json
ręczna zmiana .Załóżmy, że masz te konfiguracje:
00000000000000
99999999999999
Jeśli zadzwonisz
aws ecr get-login --region us-west-2 | bash
w ramach serwera CI, docker wygeneruje tymczasowe poświadczenia w~/.docker/config.json
.Ale chcesz wskazać konto ECR, więc musisz zmienić nazwę hosta.
Zwróć uwagę, że ta sytuacja zależy od tego, w jaki sposób tworzysz użytkownika / politykę IAM, aby zezwolić na dostęp ECR.
źródło
Musisz się upewnić, że zalogowałeś się przy użyciu poprawnych poświadczeń, Zobacz oficjalny opis błędu i sprawdź tutaj
http://docs.aws.amazon.com/AmazonECR/latest/userguide/common-errors-docker.html
Naprawianie „braku podstawowego uwierzytelniania” jest opisane w linku
źródło
To polecenie daje mi prawidłowe polecenie logowania. Jeśli nie użyjesz „--no-include-email”, pojawi się kolejny błąd. Wynik powyższego polecenia wygląda następująco: login dockera -u AWS -p ********************** bardzo duży ******. Skopiuj to i wykonaj. Teraz wyświetli się komunikat „Logowanie powiodło się”. Teraz możesz przesłać swój obraz do ECR.
Upewnij się, że Twoja reguła AMI ma uprawnienia użytkownika, z którym próbujesz się zalogować.
źródło