Solución de problemas
¿Tiene problemas para configurar el equipo o para ejecutar un contenedor? Hemos creado un script de PowerShell para comprobar los problemas comunes. Pruébelo primero para ver lo que encuentra y compartir los resultados.
Invoke-WebRequest https://aka.ms/Debug-ContainerHost.ps1 -UseBasicParsing | Invoke-Expression
Puede ver una lista de todas las pruebas que se ejecutan junto con soluciones comunes en el archivo Léame del script.
Si eso no ayuda encontrar el origen del problema, publique la salida del script en el Foro del contenedor. Este es el mejor lugar para obtener ayuda de la comunidad, incluidos los desarrolladores e Insiders de Windows.
Buscar registros
Hay varios servicios que se usan para administrar contenedores de Windows. En las secciones siguientes se muestra dónde obtener los registros de cada servicio.
Registros de contenedor de Docker
El docker logs
comando captura los registros de un contenedor de STDOUT/STDERR, las ubicaciones de depósito de registros de aplicaciones estándar para aplicaciones Linux. Normalmente, las aplicaciones Windows no inician sesión en STDOUT/STDERR; en su lugar, inician sesión en ETW, registros de eventos o archivos de registro, entre otros.
Log Monitor, una herramienta de código abierto compatible con Microsoft, ahora está disponible en GitHub. El Monitor de registro conecta los registros de aplicaciones de Windows a STDOUT/STDERR. El Monitor de registro se configura a través de un archivo de configuración.
Uso del Monitor de registro
LogMonitor.exe y LogMonitorConfig.json deben incluirse en el mismo directorio LogMonitor.
El Monitor de registro se puede usar en un patrón de uso de SHELL:
SHELL ["C:\\LogMonitor\\LogMonitor.exe", "cmd", "/S", "/C"]
CMD c:\windows\system32\ping.exe -n 20 localhost
O bien, un patrón de uso ENTRYPOINT:
ENTRYPOINT C:\LogMonitor\LogMonitor.exe c:\windows\system32\ping.exe -n 20 localhost
Ambos usos de ejemplo encapsulan la aplicación ping.exe. Otras aplicaciones (como IIS. ServiceMonitor) se puede anidar con el Monitor de registro de forma similar:
COPY LogMonitor.exe LogMonitorConfig.json C:\LogMonitor\
WORKDIR /LogMonitor
SHELL ["C:\\LogMonitor\\LogMonitor.exe", "powershell.exe"]
# Start IIS Remote Management and monitor IIS
ENTRYPOINT Start-Service WMSVC; `
C:\ServiceMonitor.exe w3svc;
El Monitor de registro inicia la aplicación ajustada como un proceso secundario y supervisa la salida STDOUT de la aplicación.
Tenga en cuenta que, en el patrón de uso de SHELL, la instrucción CMD/ENTRYPOINT debe especificarse en el formulario SHELL y no en forma exec. Cuando se usa la forma exec de la instrucción CMD/ENTRYPOINT, no se inicia SHELL y la herramienta Monitor de registros no se iniciará dentro del contenedor.
Puede encontrar más información de uso en la wiki de Log Monitor. Puede encontrar archivos de configuración de ejemplo para escenarios clave de contenedor de Windows (IIS, etc.) en el repositorio de GitHub. Puede encontrar contexto adicional en esta entrada de blog.
Motor de Docker
El motor de Docker registra en el registro de eventos "Application" de Windows, en lugar de en un archivo. Estos registros se pueden leer, ordenar y filtrar muy fácilmente con Windows PowerShell.
Por ejemplo, esto mostrará los registros del motor de Docker de los últimos 5 minutos, empezando por los más antiguos.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time
Esto también se podría canalizar fácilmente en un archivo CSV para que otra herramienta u hoja de cálculo pueda leerlo.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-30) | Sort-Object Time | Export-CSV ~/last30minutes.CSV
Habilitar el registro de depuración
También puede habilitar el registro de depuración en el motor de Docker. Esto puede resultar útil para solucionar problemas si los registros normales no tienen información suficiente.
En primer lugar, abra un símbolo del sistema con privilegios elevados, ejecute sc.exe qc docker
para obtener la línea de comandos para el servicio Docker.
Ejemplo:
C:\> sc.exe qc docker
[SC] QueryServiceConfig SUCCESS
SERVICE_NAME: docker
TYPE : 10 WIN32_OWN_PROCESS
START_TYPE : 2 AUTO_START
ERROR_CONTROL : 1 NORMAL
BINARY_PATH_NAME : "C:\Program Files\Docker\dockerd.exe" --run-service
LOAD_ORDER_GROUP :
TAG : 0
DISPLAY_NAME : Docker Engine
DEPENDENCIES :
SERVICE_START_NAME : LocalSystem
Tome la BINARY_PATH_NAME
actual y modifíquela:
- Agregue -D al final
- Escape las "con \
- Escriba el comando completo entre "
A continuación, ejecute sc.exe config docker binpath=
seguido de la nueva cadena. Por ejemplo:
sc.exe config docker binpath= "\"C:\Program Files\Docker\dockerd.exe\" --run-service -D"
Reinicie el servicio Docker
sc.exe stop docker
sc.exe start docker
Esto registrará mucha más información en el registro de eventos de aplicación, por lo que es mejor quitar la opción -D
una vez que haya terminado de solucionar los problemas. Use los mismos pasos anteriores sin -D
y reinicie el servicio para deshabilitar el registro de depuración.
Una alternativa a lo anterior es ejecutar el daemon de Docker en modo de depuración desde el símbolo de PowerShell con privilegios elevados, capturando los resultados directamente en un archivo.
sc.exe stop docker
<path\to\>dockerd.exe -D > daemon.log 2>&1
Obtención del volcado de pila
Por lo general, esto solo es útil si el soporte técnico de Microsoft lo solicita explícitamente o los desarrolladores de Docker. Se puede usar para ayudar a diagnosticar una situación en la que Docker parece haber bloqueado.
Descarga docker signal.exe.
Uso:
docker-signal --pid=$((Get-Process dockerd).Id)
El archivo de salida se ubicará en el directorio raíz de datos en el que se ejecuta docker. El directorio predeterminado es C:\ProgramData\Docker
. El directorio real puede confirmarse ejecutando docker info -f "{{.DockerRootDir}}"
.
El archivo será goroutine-stacks-<timestamp>.log
.
Tenga en cuenta que goroutine-stacks*.log
no contiene información personal.
Servicio de proceso de host
El motor de Docker depende de un servicio de contenedor de host específico de Windows. Tiene registros independientes:
- Microsoft-Windows-Hyper-V-Compute-Admin
- Microsoft-Windows-Hyper-V-Compute-Operational
Están visibles en Visor de eventos y también se pueden consultar con PowerShell.
Por ejemplo:
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Admin
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Operational
Capturar registros de análisis y depuración de HCS
Habilitar los registros de análisis y depuración para proceso de Hyper-V y guardarlos en hcslog.evtx
.
# Enable the analytic logs
wevtutil.exe sl Microsoft-Windows-Hyper-V-Compute-Analytic /e:true /q:true
# <reproduce your issue>
# Export to an evtx
wevtutil.exe epl Microsoft-Windows-Hyper-V-Compute-Analytic <hcslog.evtx>
# Disable
wevtutil.exe sl Microsoft-Windows-Hyper-V-Compute-Analytic /e:false /q:true
Capturar el rastreo detallado de HCS.
Por lo general, estos solamente son útiles si lo solicita el soporte técnico de Microsoft.
Descarga HcsTraceProfile.wprp
# Enable tracing
wpr.exe -start HcsTraceProfile.wprp!HcsArgon -filemode
# <reproduce your issue>
# Capture to HcsTrace.etl
wpr.exe -stop HcsTrace.etl "some description"
Proporciona HcsTrace.etl
a tu contacto de soporte técnico.