# Temas de resolución de problemas para Docker Desktop


> [!TIP]
>
> Si no encuentras una solución en la resolución de problemas, explora los repositorios de GitHub o [crea un nuevo problema](https://github.com/docker/desktop-feedback).

## Temas para todas las plataformas

### Certificados no configurados correctamente

#### Mensaje de error

Al intentar descargar desde un registro utilizando `docker run`, es posible que encuentres el siguiente error:

```console
Error response from daemon: Get http://192.168.203.139:5858/v2/: malformed HTTP response "\x15\x03\x01\x00\x02\x02"
```

Además, los logs del registro pueden mostrar:

```console
2017/06/20 18:15:30 http: TLS handshake error from 192.168.203.139:52882: tls: client didn't provide a certificate
2017/06/20 18:15:30 http: TLS handshake error from 192.168.203.139:52883: tls: first record does not look like a TLS handshake
```

#### Causas posibles

- Docker Desktop ignora los certificados listados bajo registros inseguros.
- Los certificados de cliente no se envían a los registros inseguros, lo que provoca fallos en el acuerdo de conexión (handshake).

#### Solución

- Asegúrate de que tu registro esté configurado correctamente con certificados SSL válidos.
- Si tu registro es autofirmado, configura Docker para que confíe en el certificado añadiéndolo al directorio de certificados de Docker (/etc/docker/certs.d/ en Linux).
- Si el problema persiste, comprueba la configuración de tu demonio de Docker y habilita la autenticación TLS.

### La interfaz de usuario de Docker Desktop se muestra verde, distorsionada o con artefactos visuales

#### Causa

Docker Desktop utiliza gráficos acelerados por hardware por defecto, lo que puede causar problemas con algunas GPUs.

#### Solución

Desactiva la aceleración por hardware:

1. Edita el archivo `settings-store.json` de Docker Desktop. Puedes encontrar este archivo en:

   - Mac: `~/Library/Group Containers/group.com.docker/settings-store.json`
   - Windows: `C:\Users\[USERNAME]\AppData\Roaming\Docker\settings-store.json`
   - Linux: `~/.docker/desktop/settings-store.json.`

2. Añade la siguiente entrada:

   ```JSON
   "disableHardwareAcceleration": true
   ```

3. Guarda el archivo y reinicia Docker Desktop.

### Al utilizar volúmenes montados se producen errores de ejecución indicando que no se encuentra un archivo de la aplicación, se deniega el acceso a un montaje de volumen o un servicio no puede iniciarse

#### Causa

Si el directorio de tu proyecto se encuentra fuera de tu directorio de usuario (`/home/<user>`), Docker Desktop requiere permisos de uso compartido de archivos para acceder a él.

#### Solución

Activa el uso compartido de archivos en Docker Desktop para Mac y Linux:

1. Ve a **Settings**, selecciona **Resources** y luego **File sharing**.
2. Añade la unidad o carpeta que contiene el Dockerfile y las rutas de montaje de volumen.

Activa el uso compartido de archivos en Docker Desktop para Windows:

1. Desde **Settings**, selecciona **Shared Folders**.
2. Comparte la carpeta que contiene el Dockerfile y las rutas de montaje de volumen.

### Errores de tipo `port already allocated` (puerto ya asignado)

#### Mensaje de error

Al iniciar un contenedor, es posible que veas un error como:

```text
Bind for 0.0.0.0:8080 failed: port is already allocated
```

O bien

```text
listen tcp:0.0.0.0:8080: bind: address is already in use
```

#### Causa

- Otra aplicación en tu sistema ya está utilizando el puerto especificado.
- Un contenedor en ejecución anterior no se detuvo correctamente y todavía está vinculado al puerto.

#### Solución

Para descubrir la identidad de este software, puedes:
- Usar la interfaz gráfica `resmon.exe`, seleccionar **Network** y luego **Listening Ports**.
- En PowerShell, usar `netstat -aon | find /i "listening "` para descubrir el PID del proceso que utiliza actualmente el puerto (el PID es el número en la columna de la extrema derecha).

Luego, decide si cerrar el otro proceso o utilizar un puerto diferente en tu aplicación de Docker.

## Temas para Linux y Mac

### Docker Desktop no se inicia en plataformas Mac o Linux

#### Mensaje de error

Docker no se inicia debido a las limitaciones de longitud de la ruta del socket de dominio Unix:

```console
[vpnkit-bridge][F] listen unix <HOME>/Library/Containers/com.docker.docker/Data/http-proxy-control.sock: bind: invalid argument
```

```console
[com.docker.backend][E] listen(vsock:4099) failed: listen unix <HOME>/Library/Containers/com.docker.docker/Data/vms/0/00000002.00001003: bind: invalid argument
```

#### Causa

En Mac y Linux, Docker Desktop crea sockets de dominio Unix que se utilizan para la comunicación entre procesos. Estos sockets se crean bajo el directorio de usuario.

Los sockets de dominio Unix tienen una longitud de ruta máxima:
 - 104 caracteres en Mac
 - 108 caracteres en Linux

Si la ruta de tu directorio de usuario es demasiado larga, Docker Desktop no podrá crear los sockets necesarios.

#### Solución

Asegúrate de que tu nombre de usuario sea lo suficientemente corto como para mantener las rutas dentro del límite permitido:
 - Mac: El nombre de usuario debe ser ≤ 33 caracteres
 - Linux: El nombre de usuario debe ser ≤ 55 caracteres

## Temas para Mac

### La actualización requiere privilegios de administrador

#### Causa

En macOS, los usuarios sin privilegios de administrador no pueden realizar actualizaciones desde el panel de Docker Desktop.

#### Solución

> [!IMPORTANT]
>
> No desinstales la versión actual antes de actualizar. Si lo haces, se eliminarán todos los contenedores, imágenes y volúmenes locales de Docker.

Para actualizar Docker Desktop:

- Pide a un administrador que instale la versión más reciente sobre la existente.
- Utiliza la bandera de instalación `--user` si es adecuada para tu configuración (consulta [Instalación en Mac](/desktop/setup/install/mac-install/#security-and-access)).

### Notificación persistente que indica que una aplicación ha cambiado mis configuraciones de Desktop

#### Causa

Recibes esta notificación porque la función de comprobación de integridad de la configuración ha detectado que una aplicación de terceros ha alterado tu configuración de Docker Desktop. Esto suele suceder debido a enlaces simbólicos incorrectos o faltantes. La notificación garantiza que estés al tanto de estos cambios para que puedas revisar y reparar cualquier problema potencial para mantener la confiabilidad del sistema.

Al abrir la notificación se presenta una ventana emergente que proporciona información detallada sobre los problemas de integridad detectados.

#### Solución

Si decides ignorar la notificación, se mostrará de nuevo únicamente en el siguiente inicio de Docker Desktop. Si decides reparar tu configuración, no se te volverá a preguntar.

Si deseas desactivar las notificaciones de comprobación de integridad de la configuración, ve a la configuración de Docker Desktop y, en la pestaña **General**, desactiva la opción **Automatically check configuration**.

### `com.docker.vmnetd` sigue ejecutándose después de salir de la aplicación

El proceso auxiliar con privilegios `com.docker.vmnetd` es iniciado por `launchd` y se ejecuta en segundo plano. El proceso no consume recursos a menos que `Docker.app` se conecte a él, por lo que es seguro ignorarlo.

### Se detectó una CPU incompatible

#### Causa

Docker Desktop requiere un procesador (CPU) que admita virtualización y, específicamente, el [Apple Hypervisor framework](https://developer.apple.com/library/mac/documentation/DriversKernelHardware/Reference/Hypervisor/).

#### Solución

Comprueba que:

  - Has instalado el Docker Desktop correcto para tu arquitectura.
  - Tu Mac es compatible con el framework Hypervisor de Apple. Para verificar si tu Mac admite el framework Hypervisor, ejecuta el siguiente comando en una ventana de la terminal:

    ```console
    $ sysctl kern.hv_support
    ```

    Si tu Mac admite el framework Hypervisor, el comando mostrará `kern.hv_support: 1`.

    De lo contrario, el comando mostrará `kern.hv_support: 0`.

Consulta también la [Referencia del Framework Hypervisor](https://developer.apple.com/library/mac/documentation/DriversKernelHardware/Reference/Hypervisor/) en la documentación de Apple, y los [Requisitos del sistema para Mac](/desktop/setup/install/mac-install/#system-requirements) de Docker Desktop.

## Temas para Windows

### Docker Desktop no se inicia cuando hay un software antivirus instalado

#### Causa

Algunos programas antivirus pueden ser incompatibles con Hyper-V y las compilaciones de Microsoft Windows. El conflicto suele ocurrir después de una actualización de Windows y se manifiesta como una respuesta de error del demonio de Docker y un fallo al iniciar Docker Desktop.

#### Solución

Como solución temporal, desinstala el software antivirus o añade Docker a las exclusiones/excepciones de tu software antivirus.

### Errores de permisos en directorios de datos para volúmenes compartidos

#### Causa

Al compartir archivos desde Windows, Docker Desktop establece los permisos en los [volúmenes compartidos](/desktop/settings-and-maintenance/settings/#file-sharing) a un valor predeterminado de [0777](https://chmodcommand.com/chmod-0777/) (permisos de lectura, escritura y ejecución para el usuario y el grupo).

Los permisos predeterminados en los volúmenes compartidos no son configurables.

#### Solución

Si estás trabajando con aplicaciones que requieren permisos diferentes, puedes:
 - Utilizar volúmenes que no estén montados en el host.
 - Encontrar una forma de hacer que las aplicaciones funcionen con los permisos de archivo predeterminados.

### Errores de sintaxis inesperados, utiliza saltos de línea de estilo Unix para los archivos en contenedores

#### Causa

Los contenedores de Docker esperan saltos de línea de estilo Unix `\n`, no de estilo Windows `\r\n`. Esto incluye los archivos referenciados en la línea de comandos para las construcciones y en las instrucciones RUN de los archivos Docker.

Ten esto en cuenta al crear archivos como scripts de shell utilizando herramientas de Windows, donde el valor predeterminado suele ser saltos de línea de estilo Windows. Estos comandos finalmente se pasan a comandos de Unix dentro de un contenedor basado en Unix (por ejemplo, un script de shell pasado a `/bin/sh`). Si se utilizan saltos de línea de estilo Windows, `docker run` falla con errores de sintaxis.

#### Solución

  - Convierte los archivos a saltos de línea de estilo Unix utilizando:
    
    ```console
    $ dos2unix script.sh
    ```
  - En VS Code, establece los saltos de línea en `LF` (Unix) en lugar de `CRLF` (Windows).

### Errores de conversión de rutas en Windows

#### Causa

A diferencia de Linux, Windows requiere una conversión de ruta explícita para el montaje de volúmenes.

En Linux, el sistema se encarga de montar una ruta en otra ruta. Por ejemplo, al ejecutar el siguiente comando en Linux:

```console
$ docker run --rm -ti -v /home/user/work:/work alpine
```

Añade un directorio `/work` al contenedor de destino para reflejar la ruta especificada.

#### Solución

Actualiza la ruta de origen. Por ejemplo, si estás utilizando la consola heredada de Windows (`cmd.exe`), puedes utilizar el siguiente comando:

```console
$ docker run --rm -ti -v C:\Users\user\work:/work alpine
```

Esto inicia el contenedor y garantiza que el volumen sea utilizable. Esto es posible porque Docker Desktop detecta la ruta de estilo Windows y proporciona la conversión adecuada para montar el directorio.

Docker Desktop también te permite utilizar rutas de estilo Unix con el formato adecuado. Por ejemplo:

```console
$ docker run --rm -ti -v /c/Users/user/work:/work alpine ls /work
```

### Fallo de comandos de Docker en Git Bash

#### Mensaje de error

```console
$ docker run --rm -ti -v C:\Users\user\work:/work alpine
docker: Error response from daemon: mkdir C:UsersUserwork: Access is denied.
```

```console
$ docker run --rm -ti -v $(pwd):/work alpine
docker: Error response from daemon: OCI runtime create failed: invalid mount {Destination:\Program Files\Git\work Type:bind Source:/run/desktop/mnt/host/c/Users/user/work;C Options:[rbind rprivate]}: mount destination \Program Files\Git\work not absolute: unknown.
```

#### Causa

Git Bash (o MSYS) proporciona un entorno similar a Unix en Windows. Estas herramientas aplican su propio preprocesamiento en la línea de comandos.

Esto afecta a `$(pwd)`, las rutas separadas por dos puntos y la tilde (`~`).

Además, el carácter `\` tiene un significado especial en Git Bash.

#### Solución

  - Desactiva temporalmente la conversión de rutas de Git Bash. Por ejemplo, ejecuta el comando con la conversión de rutas de MSYS desactivada:
     ```console
     $ MSYS_NO_PATHCONV=1 docker run --rm -ti -v $(pwd):/work alpine
     ```
  - Utiliza el formato de ruta adecuado:
     - Utiliza barras diagonales dobles (`\\` `//`) en lugar de simples (`\` `/`).
     - Si haces referencia a `$(pwd)`, añade una barra adicional `/`:

La portabilidad de los scripts no se ve afectada, ya que Linux trata múltiples `/` como una sola entrada.

### Docker Desktop falla debido a que la virtualización no funciona

#### Mensaje de error

Un mensaje de error típico es "Docker Desktop - Unexpected WSL error" que menciona el código de error `Wsl/Service/RegisterDistro/CreateVm/HCS/HCS_E_HYPERV_NOT_INSTALLED`. La ejecución manual de comandos de `wsl` también falla con el mismo código de error.

#### Causa

- Los ajustes de virtualización están desactivados en la BIOS.
- Faltan componentes de Windows Hyper-V o WSL 2.

Ten en cuenta que algunos programas de terceros, como los emuladores de Android, desactivarán Hyper-V al instalarse.

#### Soluciones

Tu máquina debe contar con las siguientes características para que Docker Desktop funcione correctamente:

##### WSL 2 y Windows Home

1. Plataforma de máquina virtual
2. [Subsistema de Windows para Linux (WSL)](https://docs.microsoft.com/en-us/windows/wsl/install-win10)
3. [Virtualización activada en la BIOS](https://support.microsoft.com/en-gb/windows/enable-virtualization-on-windows-c5578302-6e43-4b4b-a449-8ced115f58e1).
   Ten en cuenta que muchos dispositivos Windows ya tienen la virtualización activada por defecto, por lo que esto podría no ser necesario.
4. Hipervisor activado al inicio de Windows

![WSL 2 activado](/desktop/images/wsl2-enabled.png)

Debe ser posible ejecutar comandos de WSL 2 sin errores, por ejemplo:

```console
PS C:\users\> wsl -l -v
  NAME              STATE           VERSION
* Ubuntu            Running         2
  docker-desktop    Stopped         2
PS C:\users\> wsl -d docker-desktop echo WSL 2 is working
WSL 2 is working
```

Si las funciones están activadas pero los comandos no funcionan, comprueba primero que la [virtualización esté activada](#la-virtualizacion-debe-estar-activada) y luego [activa el hipervisor al inicio de Windows](#hipervisor-activado-al-inicio-de-windows) si es necesario. Si estás ejecutando Docker Desktop en una máquina virtual, asegúrate de que [el hipervisor tenga activada la virtualización anidada](#activar-la-virtualizacion-anidada).

##### Hyper-V

En Windows 10 Pro o Enterprise, también puedes usar Hyper-V con las siguientes funciones activadas:

1. [Hyper-V](https://docs.microsoft.com/en-us/windows-server/virtualization/hyper-v/hyper-v-technology-overview) instalado y funcionando.
2. [Virtualización activada en la BIOS](https://support.microsoft.com/en-gb/windows/enable-virtualization-on-windows-c5578302-6e43-4b4b-a449-8ced115f58e1).
   Ten en cuenta que muchos dispositivos Windows ya tienen la virtualización activada por defecto, por lo que esto podría no ser necesario.
3. Hipervisor activado al inicio de Windows

![Hyper-V en las características de Windows](/desktop/images/hyperv-enabled.png)

Docker Desktop requiere que Hyper-V, así como el módulo Hyper-V para Windows PowerShell, estén instalados y activados. El instalador de Docker Desktop los activa por ti.

Docker Desktop también necesita dos funciones de hardware de la CPU para utilizar Hyper-V: Virtualización y Traducción de direcciones de segundo nivel (SLAT), que también se denomina Indexación rápida de virtualización (RVI). En algunos sistemas, la virtualización debe estar activada en la BIOS. Los pasos necesarios varían según el fabricante, pero normalmente la opción de la BIOS se llama `Virtualization Technology (VTx)` o algo similar. Ejecuta el comando `systeminfo` para comprobar todas las funciones de Hyper-V requeridas. Consulta los [Requisitos previos para Hyper-V en Windows 10](https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/reference/hyper-v-requirements) para obtener más detalles.

Para instalar Hyper-V manualmente, consulta [Instalar Hyper-V en Windows 10](https://msdn.microsoft.com/en-us/virtualization/hyperv_on_windows/quick_start/walkthrough_install). Se *requiere* reiniciar después de la instalación. Si instalas Hyper-V sin reiniciar, Docker Desktop no funcionará correctamente.

Desde el menú de inicio, escribe **Activar o desactivar las características de Windows** y presiona enter. En la siguiente pantalla, verifica que Hyper-V esté activado.

##### La virtualización debe estar activada

Además de [Hyper-V](#hyper-v) o [WSL 2](/desktop/features/wsl/), la virtualización debe estar activada. Comprueba la pestaña de Rendimiento en el Administrador de tareas. Alternativamente, puedes escribir `systeminfo` en tu terminal. Si ves `Requisitos de Hyper-V: Se ha detectado un hipervisor. No se mostrarán las características necesarias para Hyper-V`, entonces la virtualización está activada.

![Administrador de tareas](/desktop/images/virtualization-enabled.png)

Si desinstalas manualmente Hyper-V, WSL 2 o desactivas la virtualización, Docker Desktop no podrá iniciarse.

Para activar la virtualización anidada, consulta [Ejecutar Docker Desktop para Windows en un entorno de VM o VDI](/desktop/setup/vm-vdi/#turn-on-nested-virtualization).

##### Hipervisor activado al inicio de Windows

Si has completado los pasos anteriores y sigues teniendo problemas para iniciar Docker Desktop, esto podría deberse a que el hipervisor está instalado pero no se inicia durante el arranque de Windows. Algunas herramientas (como las versiones antiguas de VirtualBox) y los instaladores de videojuegos desactivan el hipervisor al arrancar. Para volver a activarlo:

1. Abre una consola de comandos con privilegios de administrador.
2. Ejecuta `bcdedit /set hypervisorlaunchtype auto`.
3. Reinicia Windows.

También puedes consultar el [artículo de Microsoft TechNet](https://social.technet.microsoft.com/Forums/en-US/ee5b1d6b-09e2-49f3-a52c-820aafc316f9/hyperv-doesnt-work-after-upgrade-to-windows-10-1809?forum=win10itprovirt) sobre la configuración de Code flow guard (CFG).

##### Activar la virtualización anidada

Si estás utilizando Hyper-V y recibes el siguiente mensaje de error al ejecutar Docker Desktop en un entorno VDI:

```console
The Virtual Machine Management Service failed to start the virtual machine 'DockerDesktopVM' because one of the Hyper-V components is not running
```

Intenta [activar la virtualización anidada](/desktop/setup/vm-vdi/#turn-on-nested-virtualization).

### Docker Desktop con contenedores de Windows falla con el mensaje "El medio está protegido contra escritura"

#### Mensaje de error

`FSCTL_EXTEND_VOLUME \\?\Volume{GUID}: The media is write protected`

#### Causa

Si encuentras fallos al ejecutar Docker Desktop con contenedores de Windows, podría deberse a una política de configuración específica de Windows: FDVDenyWriteAccess.

Esta política, cuando está activada, hace que Windows monte todas las unidades fijas que no estén cifradas con BitLocker como de solo lectura. Esto también afecta a los volúmenes de las máquinas virtuales y, como resultado, es posible que Docker Desktop no pueda iniciar o ejecutar contenedores correctamente porque requiere acceso de lectura y escritura a estos volúmenes.

FDVDenyWriteAccess es una configuración de Directiva de grupo de Windows que, cuando está activada, impide el acceso de escritura a las unidades de datos fijas que no están protegidas por BitLocker. Esto se utiliza a menudo en entornos conscientes de la seguridad, pero puede interferir con herramientas de desarrollo como Docker. En el registro de Windows se puede encontrar en `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Policies\Microsoft\FVE\FDVDenyWriteAccess`.

#### Soluciones

Docker Desktop no admite la ejecución de contenedores de Windows en sistemas donde FDVDenyWriteAccess está activada. Esta configuración interfiere con la capacidad de Docker para montar volúmenes correctamente, lo cual es fundamental para el funcionamiento de los contenedores.

Para usar Docker Desktop con contenedores de Windows, asegúrate de que FDVDenyWriteAccess esté desactivada. Puedes verificar y cambiar esta configuración en el registro o a través del Editor de directivas de grupo local (`gpedit.msc`) en:

**Configuración del equipo** > **Plantillas administrativas** > **Componentes de Windows** > **Cifrado de unidad BitLocker** > **Unidades de datos fijas** > **Denegar acceso de escritura a unidades fijas no protegidas por BitLocker**

> [!NOTE]
>
> La modificación de la configuración de la Directiva de grupo puede requerir privilegios de administrador y debe cumplir con las políticas de TI de tu organización. Si la configuración se restablece después de un tiempo, esto generalmente significa que fue anulada por la configuración centralizada de tu departamento de TI. Habla con ellos antes de realizar cualquier cambio.

### Mensaje de error `Docker Desktop Access Denied` al iniciar Docker Desktop

#### Mensaje de error

Al iniciar Docker Desktop, aparece el siguiente error:

```text
Docker Desktop - Access Denied
```

#### Causa

El usuario no forma parte del grupo `docker-users`, el cual es necesario para obtener los permisos correspondientes.

#### Solución

Si tu cuenta de administrador es diferente de tu cuenta de usuario, agrégala:

1. Ejecuta **Administración de equipos** (Computer Management) como administrador.
2. Ve a **Usuarios y grupos locales** > **Grupos** > **docker-users**.
3. Haz clic derecho para añadir el usuario al grupo.
4. Cierra la sesión y vuelve a iniciarla para que los cambios surtan efecto.

