Nie można zalogować się do konta Docker


121
OS: Ubuntu 18.04 Server
Docker 18.3 CE

Jestem zalogowany na serwerze z laptopa z systemem Windows 10 przy użyciu sesji PuTTY SSH.

Nie mam Dockera na moim lokalnym laptopie z Windows, więc cała praca jest wykonywana na zdalnym serwerze.

Mogę wykonywać wszystkie polecenia Dockera na zdalnym serwerze przy użyciu sesji terminala.

Jednak kiedy próbuję zapisać mój obraz w centrum Docker, kiedy próbuję się zalogować, używając:

docker login

Otrzymuję następujący komunikat o błędzie:

error getting credentials - err: exit status 1, out: `GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.secrets was not provided by any .service files`

Nie otrzymałem żadnych komunikatów o błędach, kiedy tworzyłem swój obraz na zdalnym serwerze.

Nie widzę również folderu .docker w powiązanym katalogu domowym na serwerze zdalnym. Jakieś pomysły?


Nieco podobny problem napotkałem dzisiaj, próbując uruchomić docker loginz kontenera LXD / LXC. Ten konkretny problem rozwiązałem, kopiując .docker/config.jsonz mojego hosta do mojego $HOME/.docker/katalogu w kontenerze LXD / LXC, który utworzyłem ręcznie. Obecnie próbuję rozwiązać inny problem, ale chciałem zapytać, czy próbowałeś już tego zrobić?
code_dredd

Nie, zrezygnowałem z Windowsa. Jutro dostanę nowego laptopa, na którym zainstaluję Ubuntu 18 jako podwójny rozruch.
EastsideDev

Otworzyłem problem dotyczący tego tutaj github.com/docker/cli/issues/1136 . Jeśli znajdą na to rozwiązanie, opublikuję je tutaj.
thishandp7

Odpowiedzi:


206

Edycja 2019-04-07:

Ponieważ jest to obecnie wybrana odpowiedź, myślę, że najpierw należy wypróbować rozwiązanie @Anish Varghese poniżej, ponieważ wydaje się ono najłatwiejsze. Musisz tylko zainstalować pakiet gnupg2 i przekazać pakiety:

sudo apt install gnupg2 pass

Jeśli to nie zadziała, możesz wypróbować moje oryginalne rozwiązanie tutaj:

Miałem ten sam problem. Odpowiedź bak2trak działała, ale zapisała dane uwierzytelniające w postaci zwykłego tekstu. Oto rozwiązanie, jeśli chcesz je przechowywać w magazynie haseł.

1) Pobierz docker-credential-pass z https://github.com/docker/docker-credential-helpers/releases

2) tar -xvf docker-credential-pass.tar.gz

3) chmod u+x docker-credential-pass

4) mv docker-credential-pass /usr/bin

5) Będziesz musiał skonfigurować docker-credential-pass (poniższe kroki są oparte na https://github.com/docker/docker-credential-helpers/issues/102#issuecomment-388634452 )

5.1) zainstaluj gpg i pass ( apt-get install gpg pass)

5.2) gpg --generate-keywprowadź swoje dane. Powinieneś zobaczyć coś takiego:

pub   rsa3072 2018-10-07 [SC] [expires: 2020-10-06]
      1234567890ABCDEF1234567890ABCDEF12345678

Skopiuj linię 123 ...

5.3) pass init 1234567890ABCDEF1234567890ABCDEF12345678(wklej)

5.4) pass insert docker-credential-helpers/docker-pass-initialized-checki ustaw następne hasło „pass is initialized” (bez cudzysłowów).

5.5) pass show docker-credential-helpers/docker-pass-initialized-check. Powinieneś zobaczyć, że pass jest zainicjowany.

5.6) docker-credential-pass list

6) utwórz plik ~ / .docker / config.json z:

{
"credsStore": "pass"
}

7) Logowanie do dockera powinno teraz działać

Uwaga: jeśli w przyszłości pojawi się komunikat o błędzie „magazyn przepustek jest niezainicjowany”, uruchom poniższe polecenie (spowoduje to ponowne załadowanie magazynu przepustek w pamięci):

pass show docker-credential-helpers/docker-pass-initialized-check

Zapyta o hasło i zainicjuje magazyn przepustek.

Jest to oparte na tej dyskusji: https://github.com/moby/moby/issues/25169#issuecomment-431129898


Nie działa dla mnie. Otrzymuję komunikat, gdy próbuję zalogować się do Dockera: "błąd podczas pobierania danych logowania - błąd: stan wyjścia 1, out:` sklep przepustki jest niezainicjalizowany "
GlacialSpoon

Zacząłem ponownie po odinstalowaniu passa i usunięciu folderu .password-store. Wydaje się teraz lepiej. Dzięki.
GlacialSpoon

2
@ Jean-Phillipe Jodoin, dzięki. Wygląda na to, że muszę to okresowo wywoływać, w przeciwnym razie wywołanie logowania nie znajdzie poświadczeń. Czytałem, że może to mieć coś wspólnego z wygaśnięciem pamięci podręcznej gpg, a „pass show” budzi go. Po ponownym uruchomieniu serwera muszę wrócić do kroku „wstawianie podania”, zanim wszystko zadziała. Nie jest to zbyt wygodne, ale pozwala mi kontynuować.
GlacialSpoon

1
Sprawdź odpowiedź Anisha Varghese poniżej, wydaje się, że jest to najłatwiejsze i najczystsze rozwiązanie.
Aurelien

1
@JoePhillips: Zgadzam się z tobą. Zintegrował swoje rozwiązanie z cytowaniem.
Jean-Philippe Jodoin

215

Zainstalowanie następujących pakietów w systemie Ubuntu rozwiązało mój problem

sudo apt install gnupg2 pass

1
nie działało dla mnie, ale również instalacja gpg działała: "sudo apt install gnupg2 pass gpg"
Jörg Beyer

6
U mnie też działało na Ubuntu 18.04. Wydałem tylko sudo apt install pass, reszta przyszła jako jej zależności
Álex

4
Pracował dla mnie na Unbuntu 18.04.
Gill Bates

5
Jaka jest przyczyna problemu? i dlaczego jak gnupg2 passrozwiązać problem?
Neo

1
Pracował dla mnie również w ubuntu 19.04
Ammad Khalid

41

Napotkałem ten sam problem w Ubuntu 18.08 i to w końcu zadziałało ... jako tymczasowe rozwiązanie.

Utworzyłem ten folder, home/.docker/ponieważ niektóre rozwiązania sugerowały mi utworzenie pliku config.jsoni zapisanie w nim domyślnych poświadczeń, tj

{
    "credsStore": "pass"
}
  • Usunąłem ten plik config.json.
  • Następnie zmieniono nazwę usługi docker-credential-secretservice na coś innego, aby nie pobierał tego pliku.

    sudo mv / usr / bin / docker-credential-secretservice / usr / bin / docker-credential-secretservice_x

i zadziałało!


2
@Renrhaf Pierwszy doker domyślnie szuka dla „pass”, gdzie wyszukuje w gnome pęk kluczy i osx-pęku kluczy w OS-X. Jeśli nie zostanie znaleziony, szuka org.freedesktop.secrets. Nie znaleziono go w przypadku ubuntu 18 (niektóre problemy). Po zmianie nazwy (docker-credential-secretservice) na coś innego, a następnie wraca do samodzielnego tworzenia pliku konfiguracyjnego.Możesz zajrzeć do folderu home / .docker, jeden plik config.json zostałby utworzony.
bak2trak

1
Właśnie napotkałem ten problem i rozwiązałem go za pomocą tej metody - w pewnym sensie. Zainstalowałem docker-credential-secretservicez GH, utworzyłem ~/.docker/config.jsonz zawartością jak powyżej, a następnie spróbowałem się zalogować. Wystąpił błąd. Następnie usunięto .dockerfolder config.jsoni /usr/bin/docker-credential-secretserviceplik wykonywalny, a następnie uruchomiono docker loginponownie z sukcesem
Andy

1
Do każdego, kto ma ten sam problem: nie zapomnij usunąć pliku config.json . Prawie z tego zrezygnowałem, ale zadziałało w ostatniej chwili, po usunięciu config.json.
sr9yar

2
Dla mnie odinstalowałem, docker-composea następnie uruchomiłem sudo mv /usr/bin/docker-credential-secretservice /usr/bin/docker-credential-secretservice_xzmianę nazwy, zadziałało. Czy ktoś wie, do czego docker-credential-secretservicesłuży?
user1032613

1
To rozwiązanie działało dla mnie, ale zapisuje dane uwierzytelniające zakodowane w bazie 64. Poniżej zamieściłem rozwiązanie wykorzystujące pass. stackoverflow.com/questions/50151833/…
Jean-Philippe Jodoin

5

To też może pomóc, przynajmniej tak było w Ubuntu 20.04:

wget https://github.com/docker/docker-credential-helpers/releases/download/v0.6.3/docker-credential-secretservice-v0.6.3-amd64.tar.gz && tar -xf docker-credential-secretservice-v0.6.3-amd64.tar.gz && chmod +x docker-credential-secretservice && mv docker-credential-secretservice /usr/local/bin/

https://hackernoon.com/getting-rid-of-docker-plain-text-credentials-88309e07640d   https://github.com/docker/docker-credential-helpers/releases


4

Jeśli apt install gnupg2 pass nie działa, możesz również zainstalować pakiet golang-docker-credential-helpers


3

Mnie docker pushzawiodło

denied: requested access to the resource is denied

... więc chciałem, docker loginale po wprowadzeniu poświadczeń otrzymałem następujące informacje:

Remote error from secret service:
  org.freedesktop.DBus.Error.UnknownMethod:
  No such interface 'org.freedesktop.Secret.Collection' on object at path
  /org/freedesktop/secrets/collection/login

Error saving credentials:
  error storing credentials - err: exit status 1, out:
  No such interface 'org.freedesktop.Secret.Collection' on object at path
  /org/freedesktop/secrets/collection/login

Na szczęście miałem do dyspozycji inną maszynę, na której mogłem zalogować się bez żadnych zmian w systemie. Skopiowałem zawartość ~/.docker/config.json...

{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "<some-hash-value>"
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.09.2 (linux)"
        }
}

... do drugiej maszyny i docker pushzadziałało.


2

Dla mnie najprostszym rozwiązaniem było utworzenie pliku config.json w katalogu .docker wewnątrz katalogu domowego użytkownika:

/home/.docker/config.json

Następnie skopiowałem zawartość tego pliku z serwera, z którego mogłem zalogować się do docker hub.

{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "SOMEVALUE"
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.06.1-ce (linux)"
        }

}

Jest to łatwe obejście, ponieważ nie wymaga instalowania ani aktualizowania żadnego pakietu, którego nie możemy łatwo zrobić na serwerach produkcyjnych.


Niestety, jest to jedyne obejście, które zadziałało w moim przypadku ... przynajmniej można użyć tokenu dostępu zamiast hasła dostępu do konta.
George Aristy

Ścieżka „~ / home / .docker / config.json” wydaje się nieprawidłowa. Prawdopodobnie miałeś na myśli „~ / .docker / config.json”
BlakBat

Dzięki za wskazanie tego, zaktualizowaliśmy ścieżkę.
Pan Kashyap

1

Cóż, już przeczytałeś rozwiązanie, ale faktem jest, że gnupg2 nie jest teraz domyślnie instalowany w Ubuntu 18+, To jest powód, dla którego jakiś czas później apt upgraderzeczy zachowują się trochę inaczej.


0

Po odpowiedzi miałem kilka problemów.

  1. Generacja klucza utknęła w entropii (krok 5.2).

Na szczęście naprawa jest prosta i wystarczy zainstalować pakiet rng-tools: https://stackoverflow.com/a/32941065

  1. W pass init <key>(krok 5.3) gpg: decryption failed: No secret keypojawił się błąd .

W rzeczywistości ten problem jest spowodowany ograniczeniem tajnego klucza do uprawnień roota.

Zmieniłem własność .gnupg .password-storefolderów w katalogu domowym mojego użytkownika.

Następnie ponownie załaduj dirmngr, aby uniknąć ostrzeżenia o „niebezpiecznej własności”:

gpgconf --kill dirmngr

Jeśli nie chcesz robić wszystkiego, możesz uruchomić wszystkie polecenia odpowiedzi jako root / sudo.


0

utworzenie następującego rozwiązania rozwiązało to dla mnie:

AWS_CONFIG=$AWS_DIR/config
AWS_CREDENTIALS=$AWS_DIR/credentials
mkdir -p $AWS_DIR

0

Proste rozwiązanie: po prostu usuń "credsStore": "secretservice"z ~ / .docker / config.json


-3

Zainstaluj następujące pakiety w systemie Ubuntu

sudo apt install gnupg2 pass

To działa dla mnie.


1
Nie stanowi to żadnego dodatku do wcześniejszych odpowiedzi o takiej samej lub lepszej treści.
Karl Richter
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.