Resolução de problemas
Tem problemas para configurar seu computador ou executar um contêiner? Criamos um script do PowerShell para verificar se há problemas comuns. Tente primeiro ver o que ele encontra e compartilhe seus resultados.
Invoke-WebRequest https://aka.ms/Debug-ContainerHost.ps1 -UseBasicParsing | Invoke-Expression
Uma lista de todos os testes executados, juntamente com soluções comuns, está no arquivo Readme para o script.
Se isso não ajudar a encontrar a origem do problema, publique a saída do script no Fórum de contêineres. Este é o melhor lugar para obter ajuda da comunidade, incluindo participantes do Programa Windows Insider e desenvolvedores.
Como localizar logs
Há vários serviços que são usados para gerenciar contêineres do Windows. As próximas seções mostram onde obter logs para cada serviço.
Logs de contêiner do Docker
O comando docker logs
busca os logs de um contêiner a partir de STDOUT/STDERR, que são os locais padrão de armazenamento de logs para aplicativos Linux. Os aplicativos do Windows normalmente não registram no STDOUT/STDERR; em vez disso, eles registram no ETW, Log de Eventos ou arquivos de log, entre outros.
Log Monitor, uma ferramenta open source com suporte da Microsoft, agora está disponível no GitHub. O Log Monitor conecta os logs de aplicativos do Windows ao STDOUT/STDERR. O Monitor de Log é configurado por meio de um arquivo de configuração.
Uso do Log Monitor
LogMonitor.exe e LogMonitorConfig.json devem ser incluídos no mesmo diretório do LogMonitor.
O Monitor de Log pode ser usado em um padrão de uso do SHELL:
SHELL ["C:\\LogMonitor\\LogMonitor.exe", "cmd", "/S", "/C"]
CMD c:\windows\system32\ping.exe -n 20 localhost
Ou um padrão de uso de "ENTRYPOINT":
ENTRYPOINT C:\LogMonitor\LogMonitor.exe c:\windows\system32\ping.exe -n 20 localhost
Ambos os exemplos de uso encapsulam o aplicativo ping.exe. Outros aplicativos (como IIS.ServiceMonitor) podem ser aninhados com o Log Monitor da mesma forma.
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;
O Log Monitor inicia o aplicativo encapsulado como um processo filho e monitora a saída STDOUT do aplicativo.
Observe que, no padrão de uso shell, a instrução CMD/ENTRYPOINT deve ser especificada no formulário SHELL e não no formulário executivo. Quando a forma exec da instrução CMD/ENTRYPOINT é usada, o SHELL não é iniciado, e a ferramenta de monitoramento de log não será iniciada dentro do contêiner.
Mais informações de uso podem ser encontradas no wiki do Log Monitor. Arquivos de configuração de exemplo para os principais cenários de contêiner do Windows (IIS, etc.) podem ser encontrados no repositório github. Contexto adicional pode ser encontrado nesta postagem de blog .
Mecanismo do Docker
O Docker Engine registra no log de eventos "Aplicativo" do Windows, em vez de em um arquivo. Esses logs podem ser facilmente lidos, classificados e filtrados usando o Windows PowerShell
Por exemplo, isso mostrará os logs do Docker Engine dos últimos 5 minutos iniciando com o mais antigo.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time
Isso também pode ser facilmente canalizado para um arquivo CSV para ser lido por outra ferramenta ou planilha.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-30) | Sort-Object Time | Export-CSV ~/last30minutes.CSV
Como habilitar o registro de depuração
Você também pode habilitar o registro em log no nível de depuração no Mecanismo do Docker. Isso pode ser útil para solução de problemas se os logs regulares não tiverem detalhes suficientes.
Primeiro, abra um Prompt de comandos com privilégios elevados e, em seguida, execute o comando sc.exe qc docker
para obter a linha de comando atual do serviço Docker.
Exemplo:
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
Pegue o BINARY_PATH_NAME
atual e modifique-o:
- Adicionar um -D ao final
- Escape cada " com \
- Coloque o comando inteiro em "
Em seguida, execute sc.exe config docker binpath=
seguido pela nova cadeia de caracteres. Por exemplo:
sc.exe config docker binpath= "\"C:\Program Files\Docker\dockerd.exe\" --run-service -D"
Agora, reinicie o serviço do Docker
sc.exe stop docker
sc.exe start docker
Isso registrará muito mais no log de eventos do aplicativo, portanto, é melhor remover a opção -D
assim que terminar de solucionar problemas. Siga os mesmos passos acima sem o -D
e reinicie o serviço para desabilitar o log de depuração.
Uma alternativa à mencionada acima é executar o daemon do Docker no modo de depuração de um prompt do PowerShell com privilégios elevados, capturando a saída diretamente em um arquivo.
sc.exe stop docker
<path\to\>dockerd.exe -D > daemon.log 2>&1
Como obter o despejo de pilha
Em geral, isso só será útil se solicitado explicitamente pelo suporte da Microsoft ou por desenvolvedores do Docker. Ele pode ser usado para ajudar a diagnosticar uma situação em que o Docker parece ter travado.
Baixar docker-signal.exe.
Uso:
docker-signal --pid=$((Get-Process dockerd).Id)
O arquivo de saída estará localizado no diretório raiz de dados em que o Docker está em execução. O diretório padrão é C:\ProgramData\Docker
. O diretório real pode ser confirmado executando docker info -f "{{.DockerRootDir}}"
.
O arquivo será goroutine-stacks-<timestamp>.log
.
Observe que goroutine-stacks*.log
não contém informações pessoais.
Serviço de Computação Hospedeira
O Mecanismo do Docker depende de um Serviço de Computação de Host específico do Windows. Ele tem logs separados:
- Microsoft-Windows-Hyper-V-Compute-Admin
- Microsoft-Windows-Hyper-V-Compute-Operational
Eles são visíveis no Visualizador de Eventos e também podem ser consultados com o PowerShell.
Por exemplo:
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Admin
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Operational
Como capturar logs de análise/depuração do HCS
Para habilitar logs de análise/depuração para Computação do Hyper-V e salvá-los no 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
Como capturar o rastreamento detalhado do HCS
Em geral, eles só serão úteis se solicitados pelo suporte da Microsoft.
Baixar 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"
Forneça HcsTrace.etl
ao seu contato de suporte.