# Leer los registros (logs) del demonio


Los registros del demonio pueden ayudarte a diagnosticar problemas. Los registros se pueden guardar en una de las siguientes ubicaciones, según la configuración del sistema operativo y el subsistema de registro utilizado:

| Sistema operativo             | Ubicación                                                                                                                                              |
| :--------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |
| Linux                        | Utiliza el comando `journalctl -xu docker.service` (o lee `/var/log/syslog` o `/var/log/messages`, según tu distribución de Linux)                       |
| macOS (Docker Desktop)       | `~/Library/Containers/com.docker.docker/Data/log/vm/init.log`                                                                                          |
| Windows (WSL2)               | `%LOCALAPPDATA%\Docker\log\vm\init.log`                                                                                                                |
| Windows (Contenedores Windows) | Los registros se encuentran en el Visor de eventos de Windows (Windows Event Log)                                                                      |

En macOS y Windows (WSL2), Docker Desktop escribe los registros del demonio (`dockerd`, `containerd` y otros servicios de la máquina virtual) en un único archivo multiplexado `init.log` en formato JSON. Cada línea contiene un campo `"component"` que identifica el servicio. Para realizar un seguimiento de los registros, abre una terminal y utiliza el comando `tail` con la opción `-f`. Los registros se imprimirán hasta que finalices el comando con `CTRL+c`:

```console
$ tail -f ~/Library/Containers/com.docker.docker/Data/log/vm/init.log
{"component":"dockerd","level":"debug","msg":"attach: stdout: begin","time":"2021-07-28T10:21:21.497642089Z"}
{"component":"dockerd","level":"debug","msg":"attach: stderr: begin","time":"2021-07-28T10:21:21.497714291Z"}
...
^C
```

Para filtrar solo la salida de `dockerd`:

```console
$ grep '"component":"dockerd"' ~/Library/Containers/com.docker.docker/Data/log/vm/init.log
```

## Habilitar la depuración (debug)

Hay dos formas de habilitar la depuración. El enfoque recomendado es establecer la clave `debug` en `true` en el archivo `daemon.json`. Este método funciona para todas las plataformas de Docker.

1.  Edita el archivo `daemon.json`, que normalmente se encuentra en `/etc/docker/`. Es posible que necesites crear este archivo si aún no existe. En macOS o Windows, no edites el archivo directamente. En su lugar, edítalo a través de la configuración de Docker Desktop.

2.  Si el archivo está vacío, agrega lo siguiente:

    ```json
    {
      "debug": true
    }
    ```

    Si el archivo ya contiene JSON, simplemente agrega la clave `"debug": true`, teniendo cuidado de añadir una coma al final de la línea si no es la última línea antes de la llave de cierre. Verifica también que si la clave `log-level` está configurada, su valor sea `info` o `debug`. `info` es el valor predeterminado, y los valores posibles son `debug`, `info`, `warn`, `error`, `fatal`.

3.  Envía una señal `HUP` al demonio para obligarlo a recargar su configuración. En hosts Linux, utiliza el siguiente comando:

    ```console
    $ sudo kill -SIGHUP $(pidof dockerd)
    ```

    En hosts Windows, reinicia Docker.

En lugar de seguir este procedimiento, también puedes detener el demonio de Docker y reiniciarlo manualmente con la opción de depuración `-D`. Sin embargo, esto puede provocar que Docker se reinicie con un entorno diferente al que crean los scripts de inicio del host, lo que podría dificultar la depuración.

## Forzar el registro de un volcado de pila (stack trace)

Si el demonio no responde, puedes forzar el registro de un volcado de pila completo enviando una señal `SIGUSR1` al demonio.

- **Linux**:

  ```console
  $ sudo kill -SIGUSR1 $(pidof dockerd)
  ```

- **Windows Server**:

  Descarga [docker-signal](https://github.com/moby/docker-signal).

  Obtén el ID de proceso de dockerd con `Get-Process dockerd`.

  Ejecuta el ejecutable con la opción `--pid=<PID del demonio>`.

Esto obliga a registrar un volcado de pila, pero no detiene el demonio. Los registros del demonio mostrarán el volcado de pila o la ruta al archivo que lo contiene si se guardó en un archivo.

El demonio continúa funcionando después de manejar la señal `SIGUSR1` y volcar las pilas al registro. Los volcados de pila se pueden utilizar para determinar el estado de todas las goroutines y subprocesos (threads) dentro del demonio.

## Ver volcados de pila

El registro del demonio de Docker se puede ver utilizando uno de los siguientes métodos:

- Ejecutando `journalctl -u docker.service` en sistemas Linux que utilizan `systemctl`.
- `/var/log/messages`, `/var/log/daemon.log` o `/var/log/docker.log` en sistemas Linux más antiguos.

> [!NOTE]
>
> No es posible generar manualmente un volcado de pila en Docker Desktop para Mac o Docker Desktop para Windows. Sin embargo, puedes seleccionar el icono de Docker en la barra de tareas y elegir **Troubleshoot** para enviar información a Docker si experimentas problemas.

Busca en los registros de Docker un mensaje como el siguiente:

```text
...goroutine stacks written to /var/run/docker/goroutine-stacks-2017-06-02T193336z.log
```

Las ubicaciones donde Docker guarda estos volcados de pila dependen de tu sistema operativo y de la configuración. A veces puedes obtener información de diagnóstico útil directamente de los volcados de pila. De lo contrario, puedes proporcionar esta información a Docker para que te ayude a diagnosticar el problema.

