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.