Impossible de se connecter au compte Docker


110
OS: Ubuntu 18.04 Server
Docker 18.3 CE

Je suis connecté au serveur, depuis mon ordinateur portable Windows 10, à l'aide d'une session PuTTY SSH.

Je n'ai pas Docker sur mon ordinateur portable Windows local, donc tout le travail est effectué sur le serveur distant.

Je peux exécuter toutes les commandes Docker, sur le serveur distant, en utilisant la session de terminal.

Cependant, lorsque j'essaie d'enregistrer mon image sur le hub Docker, lorsque j'essaie de me connecter, en utilisant:

docker login

Je reçois le message d'erreur suivant:

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`

Je n'ai reçu aucun message d'erreur lorsque j'ai créé mon image sur le serveur distant.

Je ne vois pas non plus de dossier .docker dans le répertoire personnel associé sur le serveur distant. Des idées?


J'ai rencontré un problème quelque peu similaire aujourd'hui en essayant de fonctionner à docker loginpartir d'un conteneur LXD / LXC. Celui-là que j'ai résolu en copiant .docker/config.jsonde mon hôte vers mon $HOME/.docker/répertoire dans le conteneur LXD / LXC, que j'ai créé manuellement. J'essaie actuellement de résoudre un autre problème maintenant, mais je voulais vous demander si vous aviez déjà essayé de le faire?
code_dredd

Non, j'ai en quelque sorte abandonné Windows. Je reçois un nouvel ordinateur portable demain, sur lequel j'installerai Ubuntu 18 en double démarrage.
EastsideDev

J'ai ouvert un problème pour cela ici github.com/docker/cli/issues/1136 . S'ils trouvent une solution à cela, je la posterai ici.
thishandp7

Réponses:


195

Modifier le 07/04/2019:

Comme il s'agit de la réponse actuellement sélectionnée, je pense que les gens devraient d'abord essayer la solution @Anish Varghese ci-dessous car elle semble être la plus simple. Il vous suffit d'installer le gnupg2 et de transmettre les packages:

sudo apt installer gnupg2 pass

Si cela ne fonctionne pas, vous pouvez essayer ma solution originale ici:

J'ai eu le même problème. La réponse de bak2trak a fonctionné, mais elle a enregistré les informations d'identification en texte clair. Voici la solution si vous souhaitez les conserver dans un magasin de mots de passe.

1) Téléchargez docker-credential-pass depuis 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) Vous devrez configurer docker-credential-pass (les étapes suivantes sont basées sur https://github.com/docker/docker-credential-helpers/issues/102#issuecomment-388634452 )

5.1) installer gpg et passer ( apt-get install gpg pass)

5.2) gpg --generate-key, entrez vos informations. Vous devriez voir quelque chose comme ceci:

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

Copiez la ligne 123 ...

5.3) pass init 1234567890ABCDEF1234567890ABCDEF12345678(coller)

5.4) pass insert docker-credential-helpers/docker-pass-initialized-checket définissez le mot de passe suivant "pass is initialized" (sans guillemets).

5.5) pass show docker-credential-helpers/docker-pass-initialized-check. Vous devriez voir que le pass est initialisé.

5.6) docker-credential-pass list

6) créez un ~ / .docker / config.json avec:

{
"credsStore": "pass"
}

7) La connexion Docker devrait maintenant fonctionner

Remarque: Si vous obtenez l'erreur "Le magasin de pass n'est pas initialisé" lors de l'exécution future, exécutez la commande ci-dessous (elle rechargera le magasin de passe en mémoire):

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

Il vous demandera votre mot de passe et initialisera le magasin de pass.

Ceci est basé sur cette discussion: https://github.com/moby/moby/issues/25169#issuecomment-431129898


Cela n'a pas fonctionné pour moi. Je reçois le message lorsque j'essaye de me connecter au docker: "erreur d'obtention des informations d'identification - err: état de sortie 1, out:` le magasin de pass n'est pas initialisé "
GlacialSpoon

J'ai recommencé après avoir désinstallé pass et supprimé le dossier .password-store. Ça semble mieux maintenant. Merci.
GlacialSpoon

1
@ Jean-Phillipe Jodoin, merci. Il semble que je doive l'appeler périodiquement, sinon l'appel de connexion ne parvient pas à trouver les informations d'identification. J'ai lu que cela pourrait être quelque chose à voir avec l'expiration du cache gpg et le "pass show" le réveille. Lorsque le serveur redémarre, je dois revenir à l'étape "d'insertion de passage" avant que les choses ne fonctionnent. Ce n'est pas très pratique mais cela me permet de continuer.
GlacialSpoon

1
Vérifiez la réponse d'Anish Varghese ci-dessous, cela semble être la solution la plus simple et la plus propre.
Aurelien

1
@JoePhillips: D'accord avec vous. Intégré sa solution avec citation.
Jean-Philippe Jodoin

200

Installer les packages suivants dans ubuntu a résolu mon problème

sudo apt install gnupg2 pass

n'a pas fonctionné pour moi, mais l'installation de gpg a également fonctionné: "sudo apt install gnupg2 pass gpg"
Jörg Beyer

6
A travaillé pour moi sur Ubuntu 18.04 aussi. J'ai seulement émis sudo apt install pass, le reste est venu comme ses dépendances
Álex

4
A travaillé pour moi sur Unbuntu 18.04.
Gill Bates

5
Quelle est la racine du problème? et pourquoi comment gnupg2 passrésoudra le problème?
Skyfall

1
A travaillé pour moi à ubuntu 19.04 aussi
Ammad Khalid

41

J'ai rencontré le même problème dans ubuntu 18.08 et cela a finalement fonctionné pour moi .. comme une solution temporaire.

J'avais créé ce dossier home/.docker/car certaines solutions m'ont suggéré de créer un fichier config.jsonet d'y écrire les informations d'identification par défaut, c'est-à-dire

{
    "credsStore": "pass"
}
  • J'ai supprimé ce fichier config.json.
  • Puis renommé docker-credential-secretservice en autre chose pour qu'il ne récupère pas ce fichier.

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

et ça a marché!


2
@Renrhaf Le premier docker recherche par défaut "pass" où il recherche dans le porte-clés gnome et le porte-clés osx dans OS-X. S'il n'est pas trouvé, il recherche org.freedesktop.secrets. Ce n'est pas trouvé pour ubuntu 18 (quelques problèmes). Après l'avoir renommé (docker-credential-secretservice) en autre chose, il se replie pour créer le fichier de configuration par lui-même.Vous pouvez regarder dans le dossier home / .docker un fichier config.json aurait été créé.
bak2trak

Je viens de rencontrer ce problème et je l'ai résolu via cette méthode - en quelque sorte. J'ai installé à docker-credential-secretservicepartir de GH, créé un ~/.docker/config.jsonavec le contenu ci-dessus, puis essayé de me connecter. Une erreur s'est produite. Puis supprimé le .dockerdossier config.jsonet l' /usr/bin/docker-credential-secretserviceexécutable, puis exécuté à docker loginnouveau avec succès
Andy

1
À toute personne ayant le même problème: n'oubliez pas de supprimer config.json . J'ai presque abandonné cela, mais cela a fonctionné au dernier moment, après avoir supprimé config.json.
sr9yar

2
Pour moi, j'ai désinstallé docker-composepuis exécuté votre sudo mv /usr/bin/docker-credential-secretservice /usr/bin/docker-credential-secretservice_xchangement de nom, cela a fonctionné. Est-ce que quelqu'un sait à quoi ça docker-credential-secretservicesert?
user1032613

1
Cette solution a fonctionné pour moi, mais elle enregistre les informations d'identification en base 64 codées. J'ai posté ci-dessous une solution qui utilise pass. stackoverflow.com/questions/50151833/…
Jean-Philippe Jodoin

4

Si apt install gnupg2 pass ne fonctionne pas pour vous, vous pouvez également installer le package golang-docker-credential-helpers


4

Cela peut également aider, du moins dans 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


2

Pour moi a docker pushéchoué avec

denied: requested access to the resource is denied

... donc je voulais docker loginmais j'ai obtenu ce qui suit après avoir entré les informations d'identification:

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

Heureusement, j'avais une autre machine disponible sur laquelle j'ai pu me connecter sans aucune modification du système. J'ai copié le contenu de ~/.docker/config.json...

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

... à l'autre machine et a docker pushtravaillé.


1

Pour moi, la solution la plus simple était de créer un fichier config.json sous le répertoire .docker dans le répertoire personnel de l'utilisateur:

/home/.docker/config.json

Ensuite, j'ai copié le contenu de ce fichier à partir du serveur à partir duquel j'ai pu me connecter au docker hub.

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

}

C'est une solution de contournement facile, car elle ne vous oblige pas à installer ou mettre à jour un package que nous ne pouvons pas faire facilement sur les serveurs de production.


Malheureusement, c'est la seule solution de contournement qui a fonctionné pour moi ... au moins, il est possible d'utiliser un jeton d'accès au lieu du pwd de votre compte.
George Aristy

Le chemin "~ / home / .docker / config.json" semble tellement faux. Vous vouliez probablement dire "~ / .docker / config.json"
BlakBat

Merci de l'avoir indiqué, mis à jour le chemin.
Mr Kashyap le

0

Eh bien, vous avez déjà lu la solution, mais le fait est que gnupg2 n'est maintenant pas installé par défaut dans Ubuntu 18+, c'est la raison pour laquelle quelque temps après apt upgrade, les choses se comportent un peu différemment.


0

Suite à la réponse, j'ai eu plusieurs problèmes.

  1. La génération de clé était bloquée à l'entropie (étape 5.2).

Heureusement, le correctif est simple et il vous suffit d'installer le package rng-tools: https://stackoverflow.com/a/32941065

  1. Sur pass init <key>(étape 5.3), l'erreur est gpg: decryption failed: No secret keyapparue.

En fait, ce problème est dû au fait que la clé secrète est limitée aux privilèges root.

J'ai changé la propriété des .gnupg .password-storedossiers dans le domicile de mon utilisateur.

Puis rechargé le dirmngr pour éviter l'avertissement de "propriété non sécurisée":

gpgconf --kill dirmngr

Si vous ne voulez pas faire tout cela, vous pouvez exécuter toutes les commandes de la réponse en tant que root / sudo.


0

la création de ce qui suit l'a résolu pour moi:

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

0

Solution simple: supprimez simplement "credsStore": "secretservice"de ~ / .docker / config.json


-3

Installez les packages suivants dans ubuntu

sudo apt install gnupg2 pass

Cela a fonctionné pour moi.


1
Cela ne fournit aucun ajout aux réponses précédentes avec un contenu identique ou meilleur.
Karl Richter
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.