No estoy seguro si ya inicié sesión en un registro de Docker en la línea cmd usando cmd: inicio de sesión de Docker. ¿Cómo puede probar o ver si ha iniciado sesión o no, sin intentar presionar?
No estoy seguro si ya inicié sesión en un registro de Docker en la línea cmd usando cmd: inicio de sesión de Docker. ¿Cómo puede probar o ver si ha iniciado sesión o no, sin intentar presionar?
Respuestas:
Editar 2020
Volviendo al problema de github ( cerrado ) , donde se señala, no hay una sesión o estado real;
El inicio de sesión de Docker en realidad no crea ningún tipo de sesión persistente, solo almacena las credenciales del usuario en el disco para que, cuando se requiera autenticación, pueda leerlas para iniciar sesión.
Como han señalado otros, authsse agrega una entrada / nodo al ~/.docker/config.jsonarchivo (esto también funciona para registros privados ) después de iniciar sesión con éxito:
{
"auths": {
"https://index.docker.io/v1/": {}
},
...
Al cerrar la sesión, esta entrada se elimina:
$ docker logout
Removing login credentials for https://index.docker.io/v1/
Contenido de la ventana acoplable config.jsondespués de:
{
"auths": {},
...
Este archivo puede ser analizado por su script o código para verificar su estado de inicio de sesión.
Puede iniciar sesión en Docker con 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 ya ha iniciado sesión, el mensaje se verá así:
$ 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"
Para obtener la explicación original de ~/.docker/config.json, verifique la pregunta: ¿cómo puedo saber si he iniciado sesión en un registro de Docker privado?
~/.docker/config.json.
docker infoaparentemente no es confiable incluso para index.docker.io . Actualmente iniciaste sesión bien y solo veo la Registryentrada, no Username.
Utilizo una de las dos formas siguientes para esta verificación:
En caso de que haya iniciado sesión en "private.registry.com", verá una entrada correspondiente a lo siguiente en ~/.docker/config.json:
"auths": {
"private.registry.com": {
"auth": "gibberishgibberishgibberishgibberishgibberishgibberish"
}
}
Si está tratando de ver si ya tiene una sesión activa con private.registry.com, intente iniciar sesión nuevamente:
bash$ docker login private.registry.com
Username (logged-in-user):
Si obtiene un resultado como el anterior, significa que logged-in-userya tenía una sesión activa con private.registry.com. Si solo se le solicita el nombre de usuario, eso indicaría que no hay una sesión activa.
Puede hacer el siguiente comando para ver el nombre de usuario con el que inició sesión y el registro utilizado:
docker system info | grep -E 'Username|Registry'
Las respuestas aquí hasta ahora no son tan útiles:
docker info ya no proporciona esta informacióndocker logout es un inconveniente importante, a menos que ya conozca las credenciales y pueda volver a iniciar sesión fácilmentedocker login La respuesta parece bastante poco confiable y no es tan fácil de analizar por el programa.Mi solución que funcionó para mí se basa en el comentario de @ noobuntu : pensé que si ya conocía la imagen que quiero extraer, pero no estoy seguro de si el usuario ya inició sesión, puedo hacer esto:
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)
Para los registros privados, no se muestra nada en docker info. Sin embargo, el comando de cierre de sesión le dirá si inició sesión:
$ docker logout private.example.com
Not logged in to private.example.com
(Aunque esto lo obligará a iniciar sesión nuevamente).
El esquema de credenciales de docker cli no es sorprendentemente sencillo, solo eche un vistazo:
cat ~/.docker/config.json
{
"auths": {
"dockerregistry.myregistry.com": {},
"https://index.docker.io/v1/": {}
Esto existe en Windows (uso Get-Content ~\.docker\config.json) y también puede hurgar en la herramienta de credenciales que también enumera el nombre de usuario ... y creo que incluso puede recuperar la contraseña
. "C:\Program Files\Docker\Docker\resources\bin\docker-credential-wincred.exe" list
{"https://index.docker.io/v1/":"kcd"}
docker-credential-wincred.exe <store|get|erase|list|version>que significa que puede get
catalias en Powershell ... actualizado para incluir ambos
Al menos en "Docker para Windows", puede ver si ha iniciado sesión en Docker Hub a través de la interfaz de usuario. Simplemente haga clic con el botón derecho en el icono de la ventana acoplable en el área de notificación de Windows:

Si desea un true/falsevalor simple , puede canalizarlo docker.jsona 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
jqdevolver un código de salida adecuado y luego no necesita hacer comparaciones de cadenas:is_logged_in() { jq -e --arg url ${ADDRESS} '.auths | has($url)' ~/.docker/config.json > /dev/null; }; if is_logged_in; then ...
Utilice el comando como a continuación:
docker info | grep 'name'
WARNING: No swap limit support
Username: <strong>jonasm2009</strong>
En Windows, puede inspeccionar las "autorizaciones" de inicio de sesión (auths) mirando este archivo: [USER_HOME_DIR] .docker \ config.json
Ejemplo: c: \ USERS \ YOUR_USERANME.docker \ config.json
Se verá así para las credenciales de Windows
{
"auths": {
"HOST_NAME_HERE": {},
"https://index.docker.io/v1/": {}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/18.09.0 (windows)"
},
"credsStore": "wincred",
"stackOrchestrator": "swarm"
}
Como señaló @Christian, lo mejor es probar la operación primero y luego iniciar sesión solo si es necesario. El problema es que "si es necesario" no es tan obvio para hacerlo con firmeza. Un enfoque es comparar el stderr de la operación de la ventana acoplable con algunas cadenas que se conocen (por prueba y error). Por ejemplo,
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!