web-dev-qa-db-fra.com

Comment savoir si docker est déjà connecté à un serveur de registre docker

Je ne sais pas si je me suis déjà connecté à un registre docker dans la ligne de commande en utilisant cmd: docker login. Comment pouvez-vous tester ou voir si vous êtes connecté ou non, sans essayer de pousser?

59
Ville Miekk-oja

J'utilise l'une des deux manières suivantes pour cette vérification:

1: Afficher le fichier config.json:

Si vous êtes connecté à "private.registry.com", vous verrez une entrée identique à celle qui suit dans ~/.docker/config.json:

"auths": {
    "private.registry.com": {
        "auth": "gibberishgibberishgibberishgibberishgibberishgibberish"
    }
 }

2: Essayez à nouveau de vous connecter à Docker:

Si vous essayez de voir si vous avez déjà une session active avec private.registry.com, essayez de vous connecter à nouveau:

bash$ docker login private.registry.com
Username (logged-in-user):

Si vous obtenez une sortie comme celle ci-dessus, cela signifie que logged-in-user avait déjà une session active avec private.registry.com. Si vous êtes simplement promu pour le nom d'utilisateur, cela indiquerait qu'il n'y a pas de session active.

26
Arnab

Le schéma d’accréditation de docker cli n’est pas surprenant, il suffit de regarder:

cat ~\.docker\config.json

{
  "auths": {
    "dockerregistry.myregistry.com": {},
    "https://index.docker.io/v1/": {}

Sous Windows, vous pouvez également explorer l’outil des informations d’identification, qui répertorie également le nom d’utilisateur, pour en faire un peu trop;)

. "C:\Program Files\Docker\Docker\resources\bin\docker-credential-wincred.exe" list

{"https://index.docker.io/v1/":"kcd"}
5
KCD

Pour les registres privés, rien n’est affiché dans docker info. Cependant, la commande de déconnexion vous dira si vous êtes connecté:

 $ docker logout private.example.com
 Not logged in to private.example.com

(Bien que cela vous oblige à vous reconnecter.)

4
Wilfred Hughes

Les réponses ici jusqu'à présent ne sont pas si utiles:

  • docker info ne fournit plus cette information
  • docker logout est un inconvénient majeur - sauf si vous connaissez déjà les informations d'identification et pouvez facilement vous reconnecter
  • La réponse de docker login semble relativement peu fiable et difficile à analyser par le programme

Ma solution qui a fonctionné pour moi s'appuie sur le commentaire de @ noobuntu : Je me suis dit que si je connaissais déjà l'image que je voulais extraire, mais je ne suis pas sûr que l'utilisateur soit déjà connecté, je peux le faire:

try pulling target image
-> on failure:
   try logging in
   -> on failure: throw CannotLogInException
   -> on success:
      try pulling target image
      -> on failure: throw CannotPullImageException
      -> on success: (continue)
-> on success: (continue)
3
Christian

Vous pouvez utiliser la commande suivante pour voir le nom d'utilisateur avec lequel vous êtes connecté et le registre utilisé:

docker system info | grep -E 'Username|Registry'
1
Miira ben sghaier

Sous Windows, vous pouvez consulter les "autorisations" de connexion (autorisations) en consultant le fichier: [USER_HOME_DIR] .docker\config.json

Exemple: c:\USERS\YOUR_USERANME.docker\config.json

Cela ressemblera à quelque chose comme ceci pour les informations d'identification Windows

{
"auths": {
    "Host_NAME_HERE": {},
    "https://index.docker.io/v1/": {}
},
"HttpHeaders": {
    "User-Agent": "Docker-Client/18.09.0 (windows)"
},
"credsStore": "wincred",
"stackOrchestrator": "swarm"
}
1
atom88

Utilisez la commande comme ci-dessous:

docker info | grep 'name'

WARNING: No swap limit support
Username: <strong>jonasm2009</strong>
1
Meng Jonas

Au moins dans "Docker pour Windows", vous pouvez voir si vous êtes connecté au hub de docker via l'interface utilisateur. Cliquez simplement avec le bouton droit de la souris sur l'icône du menu fixe dans la zone de notification de Windows:  Docker Logged in

0
BaluJr.

Je viens de vérifier, aujourd'hui cela ressemble à ceci:

$ docker login
Authenticating with existing credentials...
Login Succeeded

REMARQUE: il s'agit d'un macOS doté de la dernière version de Docker CE, docker-credential-helper - tous deux installés avec homebrew.

0
todd_dsm

Si vous voulez une valeur true/false simple, vous pouvez diriger votre docker.json vers jq.

is_logged_in() {
  cat ~/.docker/config.json | jq -r --arg url "${REPOSITORY_URL}" '.auths | has($url)'
}

if [[ "$(is_logged_in)" == "false" ]]; then
  # do stuff, log in
fi
0
mcw0933

Comme l'a souligné @Christian, il est préférable d'essayer l'opération en premier lieu, puis de vous connecter uniquement si nécessaire. Le problème est que "si nécessaire" n'est pas si évident de le faire avec robustesse. Une approche consiste à comparer le fonctionnement du menu fixe avec certaines chaînes connues (par essais et erreurs). Par exemple, 

try "docker OPERATION"
if it failed: 
    capture the stderr of "docker OPERATION"
    if it ends with "no basic auth credentials": 
        try docker login
    else if it ends with "not found":
        fatal error: image name/tag probably incorrect
    else if it ends with <other stuff you care to trap>:
        ...
    else:
        fatal error: unknown cause

try docker OPERATION again
if this fails: you're SOL!
0
Oliver