Solución de problemas
¿Tiene problemas para configurar la máquina o ejecutar un contenedor? Hemos creado un script de PowerShell para comprobar si hay problemas comunes. Inténtelo primero para ver lo que encuentra y compartir los resultados.
Invoke-WebRequest https://aka.ms/Debug-ContainerHost.ps1 -UseBasicParsing | Invoke-Expression
En el archivo Léame del script encontrará una lista de todas las pruebas que se ejecutan, junto con soluciones comunes.
Si eso no ayuda a encontrar el origen del problema, publique la salida del script en el foro de contenedores. Este es el mejor lugar para obtener ayuda de la comunidad, incluidos los desarrolladores y windows Insider.
Búsqueda de registros
Hay varios servicios que se usan para administrar contenedores de Windows. En las secciones siguientes se muestra dónde obtener registros para cada servicio.
Registros de contenedor de Docker
El comando docker logs
captura los registros de un contenedor de STDOUT/STDERR, las ubicaciones de depósito de registros de aplicaciones estándar para las aplicaciones Linux. Normalmente, las aplicaciones de 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, ya está disponible en github. Log Monitor puentea 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 de 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 un patrón de uso de 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 pueden anidar con Log Monitor 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 encapsulada 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, SHELL no se inicia y la herramienta Log Monitor 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 de . Puede encontrar contexto adicional en esta entrada de blog.
Motor de Docker
El motor de Docker registra en el registro de eventos "Aplicación" de Windows, en lugar de hacerlo en un archivo. Estos registros se pueden leer, ordenar y filtrar fácilmente mediante Windows PowerShell.
Por ejemplo, esto mostrará los registros del motor de Docker de los últimos 5 minutos a partir del más antiguo.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time
Esto también podría canalizarse fácilmente a un archivo CSV para que lo lea otra herramienta o hoja de cálculo.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-30) | Sort-Object Time | Export-CSV ~/last30minutes.CSV
Habilitación del registro de depuración
También puede habilitar el registro en modo de depuración en el motor de Docker. Esto puede resultar útil para solucionar problemas si los registros normales no tienen suficientes detalles.
En primer lugar, abra un símbolo del sistema con privilegios elevados y ejecute el comando sc.exe qc docker
para obtener la línea de comandos actual del 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 el BINARY_PATH_NAME
actual y modifíquelo:
- Agregar un -D al final
- Aplique escape con \ a cada instancia de "
- Incluya todo el comando en "
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"
Ahora, reinicie el servicio Docker.
sc.exe stop docker
sc.exe start docker
Esto registrará muchos más detalles en el registro de eventos de la aplicación, por lo que es mejor quitar la opción -D
una vez que termines de solucionar problemas. Siga los mismos pasos anteriores sin -D
y reinicie el servicio para deshabilitar el registro de depuración.
Una alternativa a lo anterior consiste en ejecutar el demonio docker en modo de depuración desde un símbolo del sistema de PowerShell con privilegios elevados, y capturar la salida 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 haberse bloqueado.
Descargue 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 se puede confirmar 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 cómputo de host
El motor de Docker depende de un servicio de proceso de host específico de Windows. Tiene registros independientes:
- Microsoft-Windows-Hyper-V:Compute-Admin
- Microsoft-Windows-Hyper-V:Compute-Operational
Son visibles en el 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
Captura de registros analíticos y de depuración de HCS
Para habilitar los registros analíticos y de depuración para el 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
Captura del seguimiento detallado de HCS
Por lo general, estos solo son útiles si el soporte técnico de Microsoft lo solicita.
Descargar 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"
Proporcione HcsTrace.etl
al contacto de soporte técnico.