Comment savoir si Docker est déjà connecté à un serveur de registre Docker
116
Je ne sais pas si je me suis déjà connecté à un registre Docker dans la ligne cmd en utilisant cmd: docker login. Comment pouvez-vous tester ou voir si vous êtes connecté ou non, sans essayer de pousser?
Vous n'êtes pas sûr de comprendre votre question? voulez-vous savoir si vous êtes connecté sur un terminal? pourquoi ne pas exécuter la commande % docker images dans le terminal et voir si vos images s'affichent?
noobuntu
1
Je veux savoir si je suis connecté au registre dockerhub dans le terminal. Je pensais que les images étaient locales, donc cela affichera simplement les images locales, pas les images du dockerhub.
Ville Miekk-oja
1
Je crois qu'une fois que vous êtes connecté à docker, vous êtes connecté à votre registre dockerhub. Je ne pense pas qu'il y ait une connexion séparée
noobuntu
Réponses:
64
Modifier 2020
En se référant au problème github ( fermé ) , où il est signalé, il n'y a pas de session ou d'état réel;
La connexion docker ne crée en fait aucune sorte de session persistante, elle ne stocke que les informations d'identification de l'utilisateur sur le disque afin que, lorsque l'authentification est requise, il puisse les lire pour se connecter
Comme d'autres l'ont souligné, une authsentrée / un nœud est ajouté au ~/.docker/config.jsonfichier (cela fonctionne également pour les registres privés ) une fois que vous vous êtes connecté avec succès:
Lors de la déconnexion, cette entrée est ensuite supprimée:
$ docker logout
Removing login credentials for https://index.docker.io/v1/
Contenu du docker config.jsonaprès:
{
"auths": {},
...
Ce fichier peut être analysé par votre script ou code pour vérifier votre statut de connexion.
Méthode alternative (reconnexion)
Vous pouvez vous connecter à Docker avec docker login <repository>
$ docker login
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:
Si vous êtes déjà connecté, l'invite ressemblera à ceci:
$ docker login
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 (myusername): # <-- "myusername"
Le dernier lien parle de vérifier le contenu de ~/.docker/config.json.
dusan
3
docker infon'est apparemment pas fiable même pour index.docker.io . Actuellement connecté bien et ne voir que l' Registryentrée, non Username.
famousgarkin
3
Les informations du docker ne montrent plus le nom d'utilisateur. Je suis sous Windows, avec la version docker 18.05.0-ce.
Giovanni Bassi
3
Que faire si un script doit vérifier?
Teekin
Cela ne fonctionne que pour le hub principal de docker, je pense. En vous authentifiant sur n'importe quel autre dépôt, vous devrez vérifier votre fichier config.json.
duane
43
J'utilise l'une des deux méthodes suivantes pour cette vérification:
1: Afficher le fichier config.json:
Si vous êtes connecté à "private.registry.com", vous verrez une entrée pour la même chose que la suivante dans ~/.docker/config.json:
Si vous obtenez une sortie comme ci-dessus, cela signifie que vous avez logged-in-userdéjà eu une session active avec private.registry.com. Si vous êtes simplement invité à entrer un nom d'utilisateur à la place, cela indique qu'il n'y a pas de session active.
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
docker login la réponse semble assez peu fiable et pas si facile à analyser par le programme
Ma solution qui a fonctionné pour moi s'appuie sur le commentaire de @ noobuntu : j'ai pensé que si je connaissais déjà l'image que je veux 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)
C'est de loin la meilleure stratégie: essayez simplement un pull, s'il échoue, il n'est pas connecté (le reste de la logique dépendra de chaque cas d'utilisation, mais le premier essai est universellement applicable).
Oliver
2
Cependant, quelqu'un a souligné sur github.com/moby/moby/issues/15466 qu'il existe de nombreuses raisons d'échec, pas seulement un problème de connexion, mais l'état de sortie du docker ne permet pas de différencier la raison de l'échec. C'est toujours mieux que les autres solutions, mais une solution complète nécessiterait un correctif pour docker.
Oliver
5
Pour les registres privés, rien n'est affiché dans docker info. Cependant, la commande de déconnexion vous indiquera si vous étiez connecté:
$ docker logout private.example.com
Not logged in to private.example.com
(Bien que cela vous oblige à vous connecter à nouveau.)
Cela existe sur Windows (utilisation Get-Content ~\.docker\config.json) et vous pouvez également fouiller dans l'outil d'identification qui répertorie également le nom d'utilisateur ... et je pense que vous pouvez même récupérer le mot de passe
. "C:\Program Files\Docker\Docker\resources\bin\docker-credential-wincred.exe" list
Sur Windows, vous ne pouvez voir que le nom d'utilisateur, le mot de passe est stocké dans le gestionnaire des informations d'identification (panneau de configuration)
Thorbjørn Ravn Andersen
Je suppose que je vais gâcher la surprise ... docker-credential-wincred.exe <store|get|erase|list|version>ce qui signifie que vous pouvez getvotre mot de passe
KCD
Cette commande cat devrait utiliser des séparateurs de chemin Linux: cat ~ / .docker / config.json. Cela peut sembler difficile à certains, mais d'autres lecteurs pourraient simplement le copier / coller et l'essayer, sans se rendre compte facilement que l'erreur "aucun fichier ou répertoire de ce type" est due à cela. :-)
charlie arehart le
@charliearehart vous sous-estimez ma paresse, j'utilisais l' catalias dans Powershell ... mis à jour pour inclure les deux
KCD
@KCD, ah. :-) Merci de clarifier.
Charlie Arehart
4
Je viens de vérifier, aujourd'hui cela ressemble à ceci:
$ docker login
Authenticating with existing credentials...
Login Succeeded
REMARQUE: ceci est sur un macOS avec la dernière version de Docker CE, docker-credential-helper - tous deux installés avec homebrew.
Au moins dans "Docker pour Windows", vous pouvez voir si vous êtes connecté au hub docker via l'interface utilisateur. Faites un clic droit sur l'icône du menu fixe dans la zone de notification Windows:
Vous pouvez avoir jqrenvoyé un code de sortie approprié et vous n'avez pas besoin de faire de comparaisons de chaînes:is_logged_in() { jq -e --arg url ${ADDRESS} '.auths | has($url)' ~/.docker/config.json > /dev/null; }; if is_logged_in; then ...
Guss
Agréable! Je vous remercie!
mcw le
1
Utilisez la commande comme ci-dessous:
docker info | grep 'name'
WARNING: No swap limit support
Username: <strong>jonasm2009</strong>
Comme l'a souligné @Christian, il est préférable d'essayer d'abord l'opération, puis de ne se connecter que si nécessaire. Le problème est que "si nécessaire" n'est pas si évident à faire de manière robuste. Une approche consiste à comparer le stderr de l'opération docker 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!
Réponses:
Modifier 2020
En se référant au problème github ( fermé ) , où il est signalé, il n'y a pas de session ou d'état réel;
Comme d'autres l'ont souligné, une
auths
entrée / un nœud est ajouté au~/.docker/config.json
fichier (cela fonctionne également pour les registres privés ) une fois que vous vous êtes connecté avec succès:Lors de la déconnexion, cette entrée est ensuite supprimée:
Contenu du docker
config.json
après:Ce fichier peut être analysé par votre script ou code pour vérifier votre statut de connexion.
Méthode alternative (reconnexion)
Vous pouvez vous connecter à Docker avec
docker login <repository>
Si vous êtes déjà connecté, l'invite ressemblera à ceci:
Pour obtenir l'explication originale de la
~/.docker/config.json
, vérifiez la question: comment puis-je savoir si je suis connecté à un registre docker privéla source
~/.docker/config.json
.docker info
n'est apparemment pas fiable même pour index.docker.io . Actuellement connecté bien et ne voir que l'Registry
entrée, nonUsername
.J'utilise l'une des deux méthodes suivantes pour cette vérification:
1: Afficher le fichier config.json:
Si vous êtes connecté à "private.registry.com", vous verrez une entrée pour la même chose que la suivante dans
~/.docker/config.json
:2: Essayez à nouveau de vous connecter au docker:
Si vous essayez de voir si vous avez déjà une session active avec private.registry.com, essayez de vous connecter à nouveau:
Si vous obtenez une sortie comme ci-dessus, cela signifie que vous avez
logged-in-user
déjà eu une session active avecprivate.registry.com
. Si vous êtes simplement invité à entrer un nom d'utilisateur à la place, cela indique qu'il n'y a pas de session active.la source
Vous pouvez exécuter la commande suivante pour voir le nom d'utilisateur avec lequel vous êtes connecté et le registre utilisé:
la source
Les réponses ici jusqu'à présent ne sont pas si utiles:
docker info
ne fournit plus cette informationdocker logout
est un inconvénient majeur - sauf si vous connaissez déjà les informations d'identification et pouvez facilement vous reconnecterdocker login
la réponse semble assez peu fiable et pas si facile à analyser par le programmeMa solution qui a fonctionné pour moi s'appuie sur le commentaire de @ noobuntu : j'ai pensé que si je connaissais déjà l'image que je veux extraire, mais je ne suis pas sûr que l'utilisateur soit déjà connecté, je peux le faire:
la source
Pour les registres privés, rien n'est affiché dans
docker info
. Cependant, la commande de déconnexion vous indiquera si vous étiez connecté:(Bien que cela vous oblige à vous connecter à nouveau.)
la source
Le schéma d'informations d'identification docker cli est sans surprise, il suffit de jeter un coup d'œil:
cat ~/.docker/config.json
Cela existe sur Windows (utilisation
Get-Content ~\.docker\config.json
) et vous pouvez également fouiller dans l'outil d'identification qui répertorie également le nom d'utilisateur ... et je pense que vous pouvez même récupérer le mot de passe. "C:\Program Files\Docker\Docker\resources\bin\docker-credential-wincred.exe" list
la source
docker-credential-wincred.exe <store|get|erase|list|version>
ce qui signifie que vous pouvezget
votre mot de passecat
alias dans Powershell ... mis à jour pour inclure les deuxJe viens de vérifier, aujourd'hui cela ressemble à ceci:
REMARQUE: ceci est sur un macOS avec la dernière version de Docker CE, docker-credential-helper - tous deux installés avec homebrew.
la source
Au moins dans "Docker pour Windows", vous pouvez voir si vous êtes connecté au hub docker via l'interface utilisateur. Faites un clic droit sur l'icône du menu fixe dans la zone de notification Windows:
la source
Si vous voulez une
true/false
valeur simple , vous pouvez diriger votredocker.json
versjq
.la source
jq
renvoyé un code de sortie approprié et vous n'avez pas besoin de faire de comparaisons de chaînes:is_logged_in() { jq -e --arg url ${ADDRESS} '.auths | has($url)' ~/.docker/config.json > /dev/null; }; if is_logged_in; then ...
Utilisez la commande comme ci-dessous:
la source
Sous Windows, vous pouvez inspecter les "autorisations" de connexion (auths) en consultant ce fichier: [USER_HOME_DIR] .docker \ config.json
Exemple: c: \ USERS \ YOUR_USERANME.docker \ config.json
Cela ressemblera à quelque chose comme ça pour les informations d'identification Windows
la source
Comme l'a souligné @Christian, il est préférable d'essayer d'abord l'opération, puis de ne se connecter que si nécessaire. Le problème est que "si nécessaire" n'est pas si évident à faire de manière robuste. Une approche consiste à comparer le stderr de l'opération docker avec certaines chaînes connues (par essais et erreurs). Par exemple,
la source