Compartir comentarios
Las respuestas se generan en base a la documentación.

docker login

DescripciónSe autentica ante un registro
Usodocker login [OPTIONS] [SERVER]

Descripción

Se autentica ante un registro.

Puedes autenticarte ante cualquier registro público o privado para el cual tengas credenciales. La autenticación puede ser necesaria para descargar (pull) y subir (push) imágenes. Otros comandos, como docker scout y docker build, también pueden requerir autenticación para acceder a características exclusivas de suscripción o datos relacionados con tu organización de Docker.

Las credenciales de autenticación se almacenan en el almacén de credenciales configurado. Si usas Docker Desktop, las credenciales se guardan automáticamente en el llavero (keychain) nativo de tu sistema operativo. Si no estás usando Docker Desktop, puedes configurar el almacén de credenciales en el archivo de configuración de Docker, que se encuentra en $HOME/.docker/config.json en Linux o %USERPROFILE%/.docker/config.json en Windows. Si no configuras un almacén de credenciales, Docker almacena las credenciales en el archivo config.json en un formato codificado en base64. Este método es menos seguro que configurar y usar un almacén de credenciales.

docker login también admite helpers de credenciales para ayudarte a gestionar las credenciales de registros específicos.

Métodos de autenticación

Puedes autenticarte ante un registro usando un nombre de usuario y un token de acceso personal o contraseña. Docker Hub también admite un flujo de inicio de sesión basado en la web, que te permite iniciar sesión en tu cuenta de Docker sin ingresar tu contraseña. Para Docker Hub, el comando docker login utiliza un flujo de código de dispositivo por defecto, a menos que se especifique la opción --username. El flujo de código de dispositivo es una forma segura de iniciar sesión. Consulta Autenticarse en Docker Hub usando un código de dispositivo.

Almacenes de credenciales

Docker Engine puede guardar las credenciales de usuario en un almacén de credenciales externo, como el llavero nativo del sistema operativo. Usar un almacén externo es más seguro que almacenar las credenciales en el archivo de configuración de Docker.

Para usar un almacén de credenciales, necesitas un programa helper externo para interactuar con un llavero específico o un almacén externo. Docker requiere que el programa helper esté en el $PATH del host del cliente.

Puedes descargar los helpers desde la página de lanzamientos de docker-credential-helpers. Los helpers están disponibles para los siguientes almacenes de credenciales:

  • D-Bus Secret Service
  • Apple macOS keychain
  • Microsoft Windows Credential Manager
  • pass

Con Docker Desktop, el almacén de credenciales ya está instalado y configurado. A menos que desees cambiar el almacén de credenciales utilizado por Docker Desktop, puedes omitir los siguientes pasos.

Configurar el almacén de credenciales

Debes especificar el almacén de credenciales en $HOME/.docker/config.json para indicarle a Docker Engine que lo use. El valor de la propiedad de configuración debe ser el sufijo del programa a utilizar (es decir, todo lo que va después de docker-credential-). Por ejemplo, para usar docker-credential-osxkeychain:

{
  "credsStore": "osxkeychain"
}

If you are currently logged in, run docker logout to remove the credentials from the file and run docker login again.

Comportamiento por defecto

Por defecto, Docker busca el binario nativo en cada una de las plataformas, es decir, osxkeychain en macOS, wincred en Windows y pass en Linux. Un caso especial es que en Linux, Docker recurrirá al binario secretservice si no puede encontrar el binario pass. Si ninguno de estos binarios está presente, almacena las credenciales codificadas en base64 en el archivo de configuración config.json.

Protocolo de helper de credenciales

Los helpers de credenciales pueden ser cualquier programa o script que implemente el protocolo de helper de credenciales. Este protocolo está inspirado en Git, pero difiere en la información compartida.

Los helpers siempre utilizan el primer argumento del comando para identificar la acción. Solo hay tres valores posibles para ese argumento: store, get y erase.

El comando store toma una carga útil (payload) JSON desde la entrada estándar. Esa carga útil contiene la dirección del servidor para identificar la credencial, el nombre de usuario y una contraseña o un token de identidad.

{
  "ServerURL": "https://index.docker.io/v1",
  "Username": "david",
  "Secret": "passw0rd1"
}

Si el secreto que se está almacenando es un token de identidad, el Username debe establecerse en <token>.

El comando store puede escribir mensajes de error en STDOUT que Docker Engine mostrará si hubo algún problema.

El comando get toma una carga útil de cadena desde la entrada estándar. Esa carga útil contiene la dirección del servidor para la cual Docker Engine necesita las credenciales. Este es un ejemplo de esa carga útil: https://index.docker.io/v1.

El comando get escribe una carga útil JSON en STDOUT. Docker lee el nombre de usuario y la contraseña de esta carga útil:

{
  "Username": "david",
  "Secret": "passw0rd1"
}

El comando erase toma una carga útil de cadena desde STDIN. Esa carga útil contiene la dirección del servidor de la cual Docker Engine desea eliminar las credenciales. Este es un ejemplo de esa carga útil: https://index.docker.io/v1.

El comando erase puede escribir mensajes de error en STDOUT que Docker Engine mostrará si hubo algún problema.

Helpers de credenciales

Los helpers de credenciales son similares a los almacenes de credenciales, pero actúan como los programas designados para manejar credenciales de registros específicos. El almacén de credenciales por defecto no se utilizará para operaciones relacionadas con las credenciales de los registros especificados.

Configurar helpers de credenciales

Si has iniciado sesión actualmente, ejecuta docker logout para eliminar las credenciales del almacén por defecto.

Los helpers de credenciales se especifican de manera similar a credsStore, pero permiten configurar múltiples helpers a la vez. Las claves especifican el dominio del registro y los valores especifican el sufijo del programa a utilizar (es decir, todo lo que va después de docker-credential-). Por ejemplo:

{
  "credHelpers": {
    "myregistry.example.com": "secretservice",
    "docker.internal.example": "pass"
  }
}

Opciones

OpciónPredeterminadoDescripción
-p, --passwordContraseña o Token de Acceso Personal (PAT)
--password-stdinToma la Contraseña o Token de Acceso Personal (PAT) desde stdin
-u, --usernameNombre de usuario

Ejemplos

Autenticarse en Docker Hub mediante inicio de sesión basado en la web

Por defecto, el comando docker login se autentica ante Docker Hub utilizando un flujo de código de dispositivo. Este flujo te permite autenticarte en Docker Hub sin ingresar tu contraseña. En su lugar, visitas una URL en tu navegador web, ingresas un código y te autenticas.

$ docker login

USING WEB-BASED LOGIN
To sign in with credentials on the command line, use 'docker login -u <username>'

Your one-time device confirmation code is: LNFR-PGCJ
Press ENTER to open your browser or submit your device code here: https://login.docker.com/activate

Waiting for authentication in the browser…

Después de ingresar el código en tu navegador, te habrás autenticado ante Docker Hub usando la cuenta con la que tienes sesión iniciada actualmente en el sitio web de Docker Hub o en Docker Desktop. Si no has iniciado sesión, se te pedirá que lo hagas después de ingresar el código de dispositivo.

Autenticarse ante un registro hospedado localmente

Si deseas autenticarte ante un registro hospedado localmente (self-hosted), puedes especificarlo añadiendo el nombre del servidor.

$ docker login registry.example.com

Por defecto, el comando docker login asume que el registro escucha en el puerto 443 o 80. Si el registro escucha en un puerto diferente, puedes especificarlo añadiendo el número de puerto al nombre del servidor.

$ docker login registry.example.com:1337
Note

Las direcciones de registro no deben incluir componentes de ruta URL, solo el nombre de host y (opcionalmente) el puerto. Las direcciones de registro con componentes de ruta URL pueden provocar un error. Por ejemplo, docker login registry.example.com/foo/ es incorrecto, mientras que docker login registry.example.com es correcto.

La excepción a esta regla es el registro de Docker Hub, que por razones históricas puede usar el componente de ruta /v1/ en la dirección.

Autenticarse ante un registro con un nombre de usuario y contraseña

Para autenticarte ante un registro con un nombre de usuario y contraseña, puedes usar la opción --username o -u. El siguiente ejemplo se autentica ante Docker Hub con el nombre de usuario moby. La contraseña se ingresa de forma interactiva.

$ docker login -u moby

Proporcionar una contraseña a través de STDIN (--password-stdin)

Para ejecutar el comando docker login de forma no interactiva, puedes establecer la opción --password-stdin para proporcionar una contraseña a través de STDIN. El uso de STDIN evita que la contraseña termine en el historial del shell o en los archivos de registros (logs).

El siguiente ejemplo lee una contraseña de un archivo y la pasa al comando docker login utilizando STDIN:

$ cat ~/my_password.txt | docker login --username foo --password-stdin