Solução de problemas
Está com problemas para configurar sua máquina ou executar um contêiner? Criamos um script do PowerShell para verificar problemas comuns. Por favor, experimente-o primeiro para ver o que ele encontra e compartilhar seus resultados.
Invoke-WebRequest https://aka.ms/Debug-ContainerHost.ps1 -UseBasicParsing | Invoke-Expression
Uma lista de todos os testes que ele executa junto com soluções comuns está no arquivo Leiame para o script.
Se isso não ajudar a encontrar a fonte do problema, vá em frente e publique a saída do seu script no Container Forum. Este é o melhor lugar para obter ajuda da comunidade, incluindo Windows Insiders e desenvolvedores.
Localizando 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 do STDOUT/STDERR, os locais de depósito de log de aplicativos padrão para aplicativos Linux. As aplicações do Windows normalmente não registam no STDOUT/STDERR; em vez disso, registam em ETW, registos de eventos ou ficheiros de log, entre outros.
Log Monitor, uma ferramenta de código aberto suportada pela Microsoft, já está disponível no github. O Monitor de Log faz a ponte entre os logs de aplicativos do Windows e o STDOUT/STDERR. O Log Monitor é configurado através de um arquivo de configuração.
Uso do Monitor de Log
LogMonitor.exe e LogMonitorConfig.json devem ser incluídos no mesmo diretório LogMonitor.
O Log Monitor 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 do ponto de entrada:
ENTRYPOINT C:\LogMonitor\LogMonitor.exe c:\windows\system32\ping.exe -n 20 localhost
Ambos os exemplos de uso envolvem o aplicativo ping.exe. Outras aplicações (como IIS.ServiceMonitor) podem ser aninhadas com o Log Monitor de forma semelhante.
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 do SHELL, a instrução CMD/ENTRYPOINT deve ser especificada no formulário SHELL e não no formulário exec. Quando o formulário exec da instrução CMD/ENTRYPOINT é usado, o SHELL não é iniciado e a ferramenta Log Monitor não será iniciada dentro do contêiner.
Mais informações de uso podem ser encontradas no wiki do Log Monitor . Exemplos de arquivos de configuração 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 mecanismo do Docker regista no log de eventos 'Aplicativo' do Windows, em vez de num ficheiro. 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, começando 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
Ativando o log de depuração
Você também pode habilitar o log no nível de depuração no mecanismo do Docker. Isso pode ser útil para solucionar problemas se os logs regulares não tiverem detalhes suficientes.
Primeiro, abra um Prompt de Comando elevado e, em seguida, execute o comando sc.exe qc docker
para obter a linha de comandos 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
- Fuja de cada " com \
- Coloque todo o comando 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 Docker
sc.exe stop docker
sc.exe start docker
Isso irá registrar muito mais no registo de eventos da Aplicação, por isso é melhor remover a opção -D
uma vez concluída a solução de problemas. Use as mesmas etapas acima sem -D
e reinicie o serviço para desativar o log de depuração.
Uma alternativa ao acima é executar o daemon docker no modo de depuração a partir de um prompt elevado do PowerShell, capturando a saída diretamente em um arquivo.
sc.exe stop docker
<path\to\>dockerd.exe -D > daemon.log 2>&1
Obtendo despejo de pilha
Geralmente, isso só é útil se explicitamente solicitado pelo suporte da Microsoft ou desenvolvedores docker. Ele poderá ser usado para ajudar a diagnosticar uma situação em que o Docker parece ter travado.
Baixar docker-signal.exe.
Utilização:
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á sendo executado. 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 de host
O mecanismo do Docker depende de um serviço de computação de host específico do Windows. 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
Capturando logs de análise/depuração da HCS
Para habilitar os logs analíticos e de depuração para Hyper-V Compute e gravá-los em 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
Capturando o rastreamento detalhado de HCS
Geralmente, eles só são úteis se solicitados pelo suporte da Microsoft.
Descarregar 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.