docker nieautoryzowany: wymagane uwierzytelnienie - po wypchnięciu z pomyślnym logowaniem

101

Podczas wypychania obrazu dockera (po pomyślnym zalogowaniu) z mojego hosta otrzymuję komunikat „nieautoryzowany: wymagane uwierzytelnienie”.

Szczegóły poniżej.

-bash-4.2# docker login --username=asamba [email protected]
WARNING: login credentials saved in /root/.docker/config.json
*Login Succeeded*
-bash-4.2#
-bash-4.2# docker push asamba/docker-whale

Do you really want to push to public registry? [y/n]: y
The push refers to a repository [docker.io/asamba/docker-whale] (len: 0)
faa2fa357a0e: Preparing
unauthorized: authentication required
  • Wersja platformy Docker: 1.9.1 (zarówno klient, jak i serwer)
  • http://hub.docker.com ma również utworzone repozytorium (asamba / docker-whale).

W / var / log / messages jest 403, nie wiem, czy to docker. Zobacz poniżej.

Apr 16 11:39:03 localhost journal: time="2016-04-16T11:39:03.884872524Z" level=info msg="{Action=push, Username=asamba, LoginUID=1001, PID=2125}"
Apr 16 11:39:03 localhost journal: time="2016-04-16T11:39:03.884988574Z" level=error msg="Handler for POST /v1.21/images/asamba/docker-whale/push returned error: Error: Status 403 trying to push repository asamba/docker-whale to official registry: needs to be forced"
Apr 16 11:39:03 localhost journal: time="2016-04-16T11:39:03.885013241Z" level=error msg="HTTP Error" err="Error: Status 403 trying to push repository asamba/docker-whale to official registry: needs to be forced" statusCode=403
Apr 16 11:39:05 localhost journal: time="2016-04-16T11:39:05.420188969Z" level=info msg="{Action=push, Username=asamba, LoginUID=1001, PID=2125}"
Apr 16 11:39:06 localhost kernel: XFS (dm-4): Mounting V4 Filesystem
Apr 16 11:39:06 localhost kernel: XFS (dm-4): Ending clean mount
Apr 16 11:39:07 localhost kernel: XFS (dm-4): Unmounting Filesystem

Każda pomoc jest mile widziana, daj mi znać, jeśli potrzebujesz dodatkowych informacji. Nacisnąłem również z -f. Brak szczęścia!

Anand
źródło
1
Byłoby pomocne zarówno dla administratora strony, jak i innych osób szukających informacji o tym samym problemie, gdybyś kliknął znacznik wyboru obok swojej odpowiedzi, aby oznaczyć ją jako „odpowiedź” :-) Możesz to zrobić (nawet zachęca) przy przepełnieniu stosu.
Cindy Meister

Odpowiedzi:

88

Edycja (13/08/2017)

Na podstawie komentarza @ KaraPirinc, w wersji docker 17, aby się zalogować (krok 1),

docker login -u username -p password

Miałem też ten sam problem, tak go rozwiązuję.

Krok 1: Zaloguj się do Docker Hub

docker login --username=<user username> --email=<user email address>

Krok 2: Utwórz repozytorium w Docker Hub . powiedzmy „ mysqlserver: sql ”.

docker push <user username>/mysqlserver:sql
GPrathap
źródło
7
To powinna być prawidłowa odpowiedź . docker logindziała również bez parametrów
blnc
5
Działa świetnie. Jednak opcja --email została wycofana .
Igor Ganapolsky
(wersja docker 17): login dockera -u nazwa użytkownika -p hasło
Yusuf Ismail Oktay
Dziękuję za aktualizację. Zaktualizuję odpowiedź na podstawie Twojego komentarza.
GPrathap
34

Rozwiązanie, które opublikowałeś, nie działa dla mnie ...

To działa dla mnie:

  1. Utwórz repozytorium o żądanej nazwie.

  2. Kiedy zatwierdzasz obraz, nazwij go tak, jak repozytorium, łącznie z nazwą użytkownika <dockerusername>/desired-name. Na przykład radu/desired-name.

Radu Gabriel
źródło
# docker ps -a pobierz nazwę conainer --nostalgic_morse tutaj # docker commit -m "test" -a "alex" nostalgic_morse alexcpn / grpc # docker push alexcpn / grpc
Alex Punnen
28

DOBRZE! nieważne; Znalazłem rozwiązanie. z 403 Podejrzewa się, że HTTP nie prowadzi do właściwego adresu URL.

Zmień plik, który ma zapisane poświadczenia logowania, ~/.docker/config.jsonz domyślnego wygenerowanego pliku

{
        "auths": {
                "docker.io": {
                        "auth": "XXXXXXXXXXXXX",
                        "email": "[email protected]"
                }
        }
}

do - Zwróć uwagę na zmianę z docker.io -> index.docker.io/v1. To jest zmiana.

{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "XXXXXXXXXXXXX",
                        "email": "[email protected]"
                }
        }
}

Mam nadzieję, że to pomoże.

Zauważ, że pole autoryzacji powinno być „nazwa użytkownika: hasło” zakodowane w base64. Na przykład: „nazwa użytkownika: hasło” zakodowane w base64 to „dXNlcm5hbWU6cGFzc3dvcmQ =”

więc twój plik będzie zawierał:

"auth": "dXNlcm5hbWU6cGFzc3dvcmQ="
Anand
źródło
Uratowałeś mi sporo czasu! Dla mnie idealne rozwiązanie.
Marco Lenzo
7
U mnie też zadziałało. Oto to samo z wiersza poleceń:sudo docker login -e [email protected] -u someuser -p somepass https://index.docker.io/v1/
Banjer
2
Dzięki @Banjer, parametr -e jest jednak przestarzały, a sudo nie powinno być używane dla większości osób, które poprawnie skonfigurowały swój system. Lepszym rozwiązaniem byłoby: docker login -u someuser https://index.docker.io/v1/zapyta o hasło, zapobiegając umieszczeniu go w historii poleceń.
erb
19

jeśli używasz heroku, upewnij się, że nie zapomniałeś o „heroku container: login” przed naciśnięciem.

bjoern
źródło
7

Miałem podobny problem z podobnie niepomocnym komunikatem o błędzie, ale okazało się, że próbowałem przesłać obraz, który utworzyłem, do wystąpienia zarządzanego przez komputer docker.

Kiedy zalogowałem się do samej instancji, zrobiłem docker logini docker pushwszystko działało dobrze.

atomic77
źródło
dzięki, logowanie do dockera automatycznie tworzy plik konfiguracyjny, jak opisano pod linkiem
Felix
7

Miałem ten sam problem, ale naprawiłem go za pomocą wypychania z określonym adresem URL. as: docker login -u https://index.docker.io/v1/

wyjście konsoli:

The push refers to a repository [docker.io/<username>/richcity]
adc9144127c1: Preparing 
4db5654f7a64: Preparing 
ce71ae73bc60: Preparing 
e8e980243ee4: Preparing 
d773e991f7d2: Preparing 
bae23f4bbe95: Waiting 
5f70bf18a086: Waiting 
3d3e4e34386e: Waiting 
e72d5d9d5d30: Waiting 
8d1d75696199: Waiting 
bdf5b19f60a4: Waiting 
c8bd8922fbb7: Waiting 
unauthorized: authentication required

1010deiMac:dockerspace whoami$ docker login -u <username> https://index.docker.io/v1/
Password: 
Login Succeeded
1010deiMac:dockerspace whoami$ docker push <username>/richcity 
The push refers to a repository [docker.io/<username>/richcity]
adc9144127c1: Pushed 
4db5654f7a64: Pushed 
ce71ae73bc60: Pushed 
e8e980243ee4: Pushed 
d773e991f7d2: Pushed 
bae23f4bbe95: Pushed 
5f70bf18a086: Pushed 
3d3e4e34386e: Pushing [=============>                                     ] 45.07 MB/165.4 MB
e72d5d9d5d30: Pushed 
8d1d75696199: Pushing [>                                                  ] 1.641 MB/118.1 MB
bdf5b19f60a4: Pushing [============>                                      ]   142 MB/568.4 MB
c8bd8922fbb7: Pushing [========================>                          ] 59.44 MB/121.8 MB
Gabriel Wu
źródło
5

Chociaż standardowym procesem jest zalogowanie się, a następnie wypchnięcie do rejestru Dockera, sztuczka pozwalająca rozwiązać ten konkretny problem polega na zalogowaniu się, podając nazwę użytkownika i hasło w tym samym wierszu.

Więc :

docker login -u xxx -p yyy sampledockerregistry.com/myapp 
docker push sampledockerregistry.com/myapp

Pracuje

natomiast

docker login sampledockerregistry.com 
username : xxx
password : yyy
Login Succeeded

docker push sampledockerregistry.com/myapp

Niepowodzenie

Sukhmeet Sethi
źródło
4

Nawet ja zalogowałem się i sprawdziłem całą konfigurację to dalej nie działa !!!

Okazało się, że budując dockera, zapomniałem umieścić swoją nazwę użytkownika przed nazwą repozytorium

docker build docker-meteor-build 

(zbuduj pomyślnie)

A potem, kiedy wrzuciłem do mojego repozytorium, użyłem

docker push myname/docker-meteor-build 

Pokaże unauthorized authentication required

Zatem rozwiązanie to nazwa kompilacji, a push powinien być dokładnie taki sam

docker build myname/docker-meteor-build 
docker push myname/docker-meteor-build 
Thai Tran
źródło
4

Problem, z którym borykają się nowicjusze, polega na tym, że traktujemy repozytorium docker hub tak samo jak repozytorium maven i myślimy, że może ono zawierać wiele różnych plików, folderów i innych treści.

Z drugiej strony repozytorium dockera to tylko pojedynczy obraz, nie zawiera niczego innego. Może zawierać różne wersje tego samego obrazu, ale będzie zawierał tylko jeden obraz.

Więc nazwij swoje repozytorium w docker hub taką samą nazwą, jak obraz, który chcesz do niego wypchnąć, i użyj swojej nazwy użytkownika dockerhub jako prefiksu. Na przykład, jeśli twoja nazwa użytkownika to moja nazwa użytkownika, a nazwa twojego obrazu to docker -whale , pamiętaj, aby nazwać swoje repozytorium dockerhub jako docker -whale i użyj poniższych poleceń, aby oznaczyć i wypchnąć obraz do repozytorium:

docker logout                                   # to make sure you're logged out and not cause any clashes
docker tag <imageId> myusername/docker-whale    # use :1.0.0 for specific version, default is 'latest'
docker login --username=myusername              # use the username/pwd to login to docker hub
docker push myusername/docker-whale             # use :1.0.0 for pushing specific version, default is 'latest'
Neeraj B.
źródło
1
Dopóki nie zobaczyłem tego posta, otrzymywałem komunikat „odmowa: żądanie dostępu do zasobu jest odrzucone”. W końcu udało mi się sprawić, że mój pierwszy "push-docker" działał bez konieczności trzymania go w ręku przez samouczek. Wielkie dzięki!
glendon
2

Jeśli po raz pierwszy wysyłasz nowy prywatny obraz, upewnij się, że Twoja subskrypcja obsługuje ten dodatkowy obraz.

Docker umożliwia nazwanie 6 prywatnych obrazów, nawet jeśli płacisz tylko za 5, ale nie możesz wypychać tego szóstego obrazu. Brak informacji jest zagmatwany i irytujący.

user1114056
źródło
2

Tutaj rozwiązanie dla mojej sprawy (prywatne repozytoria, darmowy plan kont)

https://success.docker.com/Datacenter/Solve/Getting_%22unauthorized%3A_authentication_required%22_when_trying_to_push_image_to_DTR

Nazwa kompilacji obrazu do wypchnięcia musi mieć taką samą nazwę jak repozytorium.

Przykład: repozytoria w docker hub to: accountName / resposName image build name "accountName / resposName" -> docker build -t accountName / resposName

następnie wpisz docker push accountName / resposName: latest

To wszystko.

netz75
źródło
Link jest teraz uszkodzony. Proszę napraw to.
Eric Bolinger
1

Udało mi się stworzyć nowe repozytorium i zmienić nazwę obrazu na

$ docker tag image_id myname/server:latest

Irene Giakoumi
źródło
1

Upewnij się, że masz więcej miejsc na prywatne obrazy.

W moim przypadku przekonwertowałem użytkownika na organizację i straciłem jeden darmowy prywatny obraz, więc poprzednie wypchnięcia, które działały, już nie działały.

Alex Soto
źródło
1

Moim problemem był nieprawidłowy token autoryzacyjny po 5 minutach. Ze względu na rozmiar obrazu wypchnięcie zajęło ponad 5 minut.

Naprawiłem to, zwiększając „Czas trwania tokena autoryzacji” do 10 minut.

wprowadź opis obrazu tutaj

Manuel Schmitzberger
źródło
Gdzie znalazłeś to ustawienie? Nie mogłem tego znaleźć.
Vic Seedoubleyew
2
Mój sposób na uniknięcie tego problemu polegał na uruchomieniu docker loginw innym oknie terminala na krótko przed zakończeniem przesyłania
Vic Seedoubleyew Kwietnia
@VicSeedoubleyew Admin Area -> Settings -> CI/CD -> Container Registry. url ścieżka: /admin/application_settings/ci_cd.
Manuel Schmitzberger
Dziękuję za odpowiedź. Strefa administracyjna czego? Nie widzę tego na dockerhub
Vic Seedoubleyew
To jest dla własnej instancji gitlab. Nie jestem pewien, czy możesz to skonfigurować na dockerhub.
Manuel Schmitzberger
0

Upewnij się, że nazwa repozytorium Dockera jest zgodna z nazwą lokalnego repozytorium Docker. np. powiedzmy, czy masz lokalną nazwę repozytorium „kavashgar / nodjsapp”

wtedy powinieneś mieć również nazwy repozytoriów „kavashgar” w docker hub

smakintel.com
źródło
0

w pliku konfiguracyjnym ~ / .docker / config.json dodaj

{
        "auths": {
             "https://index.docker.io/v1/": {
                        "auth": "XXXXXXXXXXXXX",
                        "email": "[email protected]"
                }
        }
}

gdzie XXXXX to kodowanie base64 twojej nazwy użytkownika: hasło (to: jest włączone) z https://hub.docker.com

w moim przypadku miałem ten sam błąd przy ciągnięciu. problem (pod Windows) został sprowokowany przez podwójny działający proces dockera, więc zabij je wszystkie i zrestartuj jedną usługę i działa.

Badr Bellaj
źródło
0

Były już dobre odpowiedzi, ale chciałbym wspomnieć o jednej - NIE musisz wcześniej tworzyć repozytorium przed wysłaniem go.

Problem polegał na tym, że nie podałem poprawnej nazwy użytkownika konta, na które się zalogowałem. Ale kiedy poprawna nazwa użytkownika zostanie ustawiona przed obrazem (np. YOURNAME/YOURIMAGE) Za pomocą jego tagu, możesz go przesłać bez wcześniejszego tworzenia nowego repozytorium.

sudo docker tag IMAGE:VERSION USERNAME/IMAGE:VERSION
sudo docker push USERNAME/IMAGE:VERSION
Blaszard
źródło
0

Ten sam problem podczas wypychania obrazu:

unauthorized: authentication required

Co ja zrobiłem:

docker login --username=yourhubusername [email protected]

Który wydrukował:

--email jest przestarzały (ale logowanie powiodło się)

Rozwiązanie: użyj najnowszej składni logowania.

docker login

Zapyta o nazwę użytkownika i hasłoInteraktywnie . Wtedy push obrazu po prostu działa.

Nawet po użyciu nowej składni mój ~/.docker/config.jsonwygląd wygląda tak po zalogowaniu:

{
    "auths": {
        "https://index.docker.io/v1/": {}
    },
    "credsStore": "osxkeychain"
}

Więc poświadczenie znajduje się w pęku kluczy macOS.

Jing Li
źródło
0

Otrzymałem podobny błąd w przypadku sudo docker push / sudo docker pull w repozytorium ecr, ponieważ aws cli jest zainstalowane na moim użytkowniku (abc) i docker jest zainstalowane na koncie root. Próbowałem uruchomić sudo docker push na moim użytkowniku (abc)

Naprawiono to przez zainstalowanie aws cli w root, skonfigurowanie aws przy użyciu aws configure w rootowaniu i uruchomienie sudo docker push do ecr na koncie użytkownika root

satish G.
źródło
0

Spróbuj docker logoutnajpierw, a następnie zaloguj się ponownie zdocker login

Rohman Masyhar
źródło
0

Możesz gdzieś mv plik xxx / .docker / config.json, aby go obsłużyć. Następnie spróbuj zalogować się ponownie, aby utworzyć nowy plik config.json.

#mv xx/.docker/config.json xx/.docker/config_old.json
#docker login https://index.docker.io/v1/
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: YOUR USERNAME
Password: YOUR PASSWORD
WARNING! Your password will be stored unencrypted in /xxx/.docker/config.json.
Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
seylul
źródło
0

Jeśli biegasz windows 7 docker Registry

  1. Start **Docker Quick Start terminal**run (ten terminal umożliwia połączenie) Dopóki nie wypchnąłeś obrazów, to utrzyma token przy życiu.
  2. Zaloguj sie docker login
  3. Upewnij się, że otagowałeś obraz nazwą użytkownika

    docker build -f Dockerfile -t 'username'/imagename

  4. obraz push

    docker image push username/imagename

Uwaga : nazwa obrazu wszystkie małe litery

Dapper Dan
źródło
0

Miałem podobny problem.

Error response from daemon: Get https://registry-1.docker.io/v2/hadolint/hadolint/manifests/latest: unauthorized: incorrect username or password

Dowiedziałem się, że nawet jeśli zaloguję się pomyślnie za pomocą docker loginpolecenia, jakiekolwiek ściągnięcie nie powiodło się. Próbowałem wyczyścić plik~/.docker/config.json ale nic się nie poprawiło.

Patrząc w plik konfiguracyjny zauważyłem, że poświadczenia nie zostały tam zapisane, ale w pliku "credsStore": "secretservice". W Linuksie jest to narzędzie seahorselub Passwords and Keys. Sprawdziłem tam i wyczyściłem wszystkie dane logowania do docker hub. Po tym nowy login dockera działał zgodnie z oczekiwaniami.

Alex
źródło