# Configurar la imposición del inicio de sesión





Puedes imponer el inicio de sesión para Docker Desktop utilizando varios métodos. Elige el método que mejor se adapte a la infraestructura y los requisitos de seguridad de tu organización.

## Elige tu método

| Método | Plataforma |
|:-------|:---------|
| Clave de registro | Solo Windows |
| Perfiles de configuración | Solo Mac |
| Archivo `plist` | Solo Mac |
| `registry.json` | Todas las plataformas |

> [!TIP]
>
> Para Mac, los perfiles de configuración ofrecen la mayor seguridad porque están protegidos por la Protección de Integridad del Sistema (System Integrity Protection - SIP) de Apple.

## Windows: Método de clave de registro {#metodo-de-clave-de-registro-solo-windows}

**Configuración manual**



Para configurar el método de clave de registro manualmente:

1. Crea la clave del registro:

   ```console
   $ HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Docker\Docker Desktop
   ```
2. Crea un valor de cadena múltiple llamado `allowedOrgs`.
3. Utiliza los nombres de tu organización como datos de cadena. Puedes agregar múltiples organizaciones:
   - Utiliza solo letras minúsculas
   - Agrega cada organización en una línea separada
   - No utilices espacios ni comas como separadores
4. Reinicia Docker Desktop.
5. Verifica que aparezca el mensaje de **¡Inicio de sesión requerido!** (Sign in required!) en Docker Desktop.

**Despliegue de Directiva de Grupo**



Despliega la clave de registro en toda tu organización utilizando una Directiva de Grupo (Group Policy):

1. Crea un script de registro con la siguiente estructura:
   - Ruta: `HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Docker\Docker Desktop`
   - Nombre del valor: `allowedOrgs` (cadena múltiple)
   - Datos del valor: Los nombres de tus organizaciones, uno por línea, solo en minúsculas
2. En la Consola de Administración de Directivas de Grupo (Group Policy Management), crea o edita un GPO.
3. Navega a **Configuración del equipo** (Computer Configuration) > **Preferencias** (Preferences) > **Configuración de Windows** (Windows Settings) > **Registro** (Registry).
4. Haz clic derecho en **Registro** > **Nuevo** > **Elemento de registro** (Registry Item).
5. Configura el elemento de registro:
   - Acción: **Actualizar** (Update)
   - Ruta de la clave: `HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Docker\Docker Desktop`
   - Nombre del valor: `allowedOrgs`
   - Datos del valor: Los nombres de tus organizaciones
6. Vincula el GPO a la Unidad Organizativa de destino.
7. Realiza pruebas en un grupo pequeño utilizando `gpupdate /force`.
8. Despliégalo en toda la organización tras la verificación.



## Mac: Método de perfiles de configuración (recomendado) {#metodo-de-perfiles-de-configuracion-solo-mac}

Los perfiles de configuración proporcionan el método de imposición más seguro para Mac, ya que están protegidos por la Protección de Integridad del Sistema de Apple.

La carga útil (payload) es un diccionario de valores clave. Docker Desktop admite las siguientes claves:

- `allowedOrgs`: Establece una lista de organizaciones en una sola cadena, donde cada organización está en minúsculas y separada por un punto y coma.
- `overrideProxyHTTP`: Establece la URL del proxy HTTP que debe usarse para las solicitudes HTTP salientes.
- `overrideProxyHTTPS`: Establece la URL del proxy HTTP que debe usarse para las solicitudes HTTPS salientes.
- `overrideProxyExclude`: Omite la configuración del proxy para los hosts y dominios especificados. Utiliza una lista separada por comas.
- `overrideProxyPAC`: Establece la ruta del archivo donde se encuentra el archivo PAC. Tiene precedencia sobre el archivo PAC remoto en el proxy seleccionado.
- `overrideProxyEmbeddedPAC`: Establece el contenido de un archivo PAC en memoria. Tiene precedencia sobre `overrideProxyPAC`.

Anular al menos uno de los ajustes de proxy a través de los perfiles de configuración bloqueará automáticamente los ajustes, ya que serán gestionados por Mac.

1. Crea un archivo llamado `docker.mobileconfig` e incluye el siguiente contenido:
   ```xml
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   <plist version="1.0">
   <dict>
      <key>PayloadContent</key>
      <array>
         <dict>
            <key>PayloadType</key>
            <string>com.docker.config</string>
            <key>PayloadVersion</key>
            <integer>1</integer>
            <key>PayloadIdentifier</key>
            <string>com.docker.config</string>
            <key>PayloadUUID</key>
            <string>eed295b0-a650-40b0-9dda-90efb12be3c7</string>
            <key>PayloadDisplayName</key>
            <string>Docker Desktop Configuration</string>
            <key>PayloadDescription</key>
            <string>Configuration profile to manage Docker Desktop settings.</string>
            <key>PayloadOrganization</key>
            <string>Your company name</string>
            <key>allowedOrgs</key>
            <string>first_org;second_org</string>
            <key>overrideProxyHTTP</key>
            <string>http://company.proxy:port</string>
            <key>overrideProxyHTTPS</key>
            <string>https://company.proxy:port</string>
         </dict>
      </array>
      <key>PayloadType</key>
      <string>Configuration</string>
      <key>PayloadVersion</key>
      <integer>1</integer>
      <key>PayloadIdentifier</key>
      <string>com.yourcompany.docker.config</string>
      <key>PayloadUUID</key>
      <string>0deedb64-7dc9-46e5-b6bf-69d64a9561ce</string>
      <key>PayloadDisplayName</key>
      <string>Docker Desktop Config Profile</string>
      <key>PayloadDescription</key>
      <string>Config profile to enforce Docker Desktop settings for allowed organizations.</string>
      <key>PayloadOrganization</key>
      <string>Your company name</string>
   </dict>
   </plist>
   ```
2. Reemplaza los marcadores de posición:
   - Cambia `com.yourcompany.docker.config` por el identificador de tu empresa
   - Reemplaza `Your company name` por el nombre de tu organización, asegurándote de que esté todo en minúsculas
   - Reemplaza `PayloadUUID` por un UUID generado aleatoriamente
   - Actualiza el valor `allowedOrgs` con los nombres de tus organizaciones (separados por punto y coma)
   - Reemplaza `company.proxy:port` con el host (o dirección IP) y puerto del servidor proxy http/https
3. Despliega el perfil utilizando tu solución de MDM.
4. Verifica que el perfil aparezca en **Ajustes del Sistema** > **General** > **Gestión de dispositivos** en **Dispositivo (gestionado)**. Asegúrate de que el perfil aparezca con el nombre y los ajustes correctos.

Algunas soluciones de MDM te permiten especificar la carga útil como un diccionario simple de ajustes de clave-valor sin el contenedor `.mobileconfig` completo:

```xml
<dict>
   <key>allowedOrgs</key>
   <string>first_org;second_org</string>
   <key>overrideProxyHTTP</key>
   <string>http://company.proxy:port</string>
   <key>overrideProxyHTTPS</key>
   <string>https://company.proxy:port</string>
</dict>
```

## Mac: Método de archivo plist {#metodo-plist-solo-mac}

**Creación manual**



1. Crea el archivo `/Library/Application Support/com.docker.docker/desktop.plist`.
2. Agrega este contenido, reemplazando `myorg1` y `myorg2` con los nombres de tus organizaciones y asegurándote de que tengan solo letras minúsculas:
   ```xml
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   <plist version="1.0">
     <dict>
	     <key>allowedOrgs</key>
	     <array>
             <string>myorg1</string>
             <string>myorg2</string>
         </array>
     </dict>
   </plist>
   ```
3. Establece los permisos del archivo para evitar que los usuarios que no sean administradores lo editen.
4. Reinicia Docker Desktop.
5. Verifica que aparezca el mensaje de `Sign in required!` en Docker Desktop.

**Despliegue mediante script de shell**



Crea y despliega un script para la distribución en toda la organización:

```bash
#!/bin/bash

# Crear el directorio si no existe
sudo mkdir -p "/Library/Application Support/com.docker.docker"

# Escribir el archivo plist
sudo defaults write "/Library/Application Support/com.docker.docker/desktop.plist" allowedOrgs -array "myorg1" "myorg2"

# Establecer los permisos adecuados
sudo chmod 644 "/Library/Application Support/com.docker.docker/desktop.plist"
sudo chown root:admin "/Library/Application Support/com.docker.docker/desktop.plist"
```

Despliega este script mediante SSH, herramientas de soporte remoto o tu método de despliegue preferido.



## Todas las plataformas: Método registry.json {#metodo-registryjson-todos}

El método registry.json funciona en todas las plataformas y ofrece opciones de despliegue flexibles.

### Ubicaciones de los archivos

Crea el archivo `registry.json` (UTF-8 sin BOM) en la ubicación correspondiente:

| Plataforma | Ubicación |
| --- | --- |
| Windows | `/ProgramData/DockerDesktop/registry.json` |
| Mac | `/Library/Application Support/com.docker.docker/registry.json` |
| Linux | `/usr/share/docker-desktop/registry/registry.json` |

### Configuración básica

**Creación manual**



1. Asegúrate de que los usuarios sean miembros de tu organización de Docker.
2. Crea el archivo `registry.json` en la ubicación correspondiente a tu plataforma.
3. Agrega este contenido, reemplazando los nombres de las organizaciones por los tuyos y asegurándote de que tengan solo letras minúsculas:
      ```json
      {
         "allowedOrgs": ["myorg1", "myorg2"]
      }
      ```
4. Establece los permisos del archivo para evitar que el usuario lo edite.
5. Reinicia Docker Desktop.
6. Verifica que aparezca el mensaje de `Sign in required!` en Docker Desktop.

> [!TIP]
>
> Si los usuarios tienen problemas para iniciar Docker Desktop después de imponer el inicio de sesión, es posible que necesiten actualizar a la versión más reciente.

**Configuración por línea de comandos**



#### Windows (PowerShell como Administrador)

```shell
Set-Content /ProgramData/DockerDesktop/registry.json '{"allowedOrgs":["myorg1","myorg2"]}'
```

#### Mac

```console
sudo mkdir -p "/Library/Application Support/com.docker.docker"
echo '{"allowedOrgs":["myorg1","myorg2"]}' | sudo tee "/Library/Application Support/com.docker.docker/registry.json"
```

#### Linux

```console
sudo mkdir -p /usr/share/docker-desktop/registry
echo '{"allowedOrgs":["myorg1","myorg2"]}' | sudo tee /usr/share/docker-desktop/registry/registry.json
```

**Configuración en el momento de la instalación**



Crea el archivo registry.json durante la instalación de Docker Desktop:

#### Windows

```shell
# PowerShell
Start-Process '.\Docker Desktop Installer.exe' -Wait 'install --allowed-org=myorg'

# Símbolo del sistema (Command Prompt)
"Docker Desktop Installer.exe" install --allowed-org=myorg1
```

> [!NOTE]
>
> La bandera `--allowed-org` acepta solo una organización. Para imponer el inicio de sesión para múltiples organizaciones en Mac, configura el archivo `registry.json` después de la instalación.

#### Mac

```console
sudo hdiutil attach Docker.dmg
sudo /Volumes/Docker/Docker.app/Contents/MacOS/install --allowed-org=myorg
sudo hdiutil detach /Volumes/Docker
```
> [!NOTE]
>
> La bandera `--allowed-org` acepta solo una organización. Para imponer el inicio de sesión para múltiples organizaciones en Mac, configura el archivo `registry.json` después de la instalación.



## Precedencia de los métodos

Cuando existen múltiples métodos de configuración en el mismo sistema, Docker Desktop utiliza este orden de precedencia:

1. Clave de registro (solo Windows)
2. Perfiles de configuración (solo Mac)
3. Archivo plist (solo Mac)
4. Archivo registry.json

## Solución de problemas de la imposición del inicio de sesión

Si la imposición del inicio de sesión no funciona:

- Verifica las ubicaciones y los permisos de los archivos
- Comprueba que los nombres de las organizaciones utilicen letras minúsculas
- Reinicia Docker Desktop o reinicia el sistema
- Confirma que los usuarios sean miembros de las organizaciones especificadas
- Actualiza Docker Desktop a la versión más reciente

