# docker login

**Descripción:** Se autentica ante un registro

**Uso:** `docker 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](#credential-stores)
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](#credential-helpers) 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](#authenticate-to-docker-hub-with-web-based-login).

### 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](https://github.com/docker/docker-credential-helpers/releases)
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](https://www.passwordstore.org/)

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`:

```json
{
  "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.

```json
{
  "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:

```json
{
  "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](#credential-stores), 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:

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


## Opciones

| Opción                                                        | Predeterminado                                        | Descripción                                                                                                                                    |
| ------------------------------------------------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|  | `-p`, `--password` |  |  Contraseña o Token de Acceso Personal (PAT) |

 | `--password-stdin` |  |  Toma la Contraseña o Token de Acceso Personal (PAT) desde stdin |

 | `-u`, `--username` |  |  Nombre 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.

```console
$ 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.

```console
$ 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.

```console
$ 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 {#username}

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.

```console
$ docker login -u moby
```

### Proporcionar una contraseña a través de STDIN (--password-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`:

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



