Solução de problemas

Problemas para configurar seu computador ou executar um contêiner? Criamos um script do PowerShell para verificar se há problemas comuns. Teste-o primeiro para ver o que será encontrado e compartilhe os resultados.

Invoke-WebRequest https://aka.ms/Debug-ContainerHost.ps1 -UseBasicParsing | Invoke-Expression

Uma lista de todos os testes executados juntamente com as soluções comuns fica no arquivo Leia-me do script.

Se isso não ajudar a localizar a origem do problema, vá em frente e publique o resultado do script no Fórum de Contêiner. Esse é o melhor lugar para obter ajuda da comunidade, incluindo especialistas e desenvolvedores do Windows.

Localizando logs

Há vários serviços que são usados para gerenciar contêineres do Windows. As seções a seguir mostram onde obter os logs para cada serviço.

Mecanismo do Docker

O mecanismo do Docker registra no log de eventos do 'Aplicativo' do Windows, em vez de em um arquivo. Esses logs podem ser lidos, classificados e filtrados facilmente usando o Windows PowerShell

Por exemplo, isso mostrará os logs do mecanismo do Docker dos últimos 5 minutos, começando pelo mais antigo.

Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time 

Isso pode ser conectado facilmente em 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

Habilitando o log de depuração

Você também pode habilitar o log de depuração no mecanismo do Docker. Isso poderá 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, depois execute sc.exe qc docker e obtenha a linha de comando atual para o serviço do 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 atual BINARY_PATH_NAME e modifique-o:

  • Adicione -D ao final
  • Troque cada " por \
  • Coloque todo o comando entre "

Em seguida, execute sc.exe config docker binpath= seguido pela nova sequência. Por exemplo:

sc.exe config docker binpath= "\"C:\Program Files\Docker\dockerd.exe\" --run-service -D"

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 após a solução de problemas. Use as mesmas etapas acima sem -D e reinicie o serviço para desabilitar o log de depuração.

Uma alternativa ao especificado acima é executar o daemon do docker no modo de depuração em 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

Obtendo dados de despejo de pilha e dados do daemon.

Em geral, eles são úteis somente se solicitados explicitamente pelo suporte da Microsoft, ou desenvolvedores do docker. Eles podem ser usados para ajudar a diagnosticar uma situação em que o docker pareça estar suspenso.

Baixe o docker-signal.exe.

Uso:

Get-Process dockerd
# Note the process ID in the `Id` column
docker-signal -pid=<id>

Os arquivos de saída estarão localizados no diretório raiz de dados em que o docker estiver sendo executado. O diretório padrão é C:\ProgramData\Docker. O diretório real poderá ser confirmado executando docker info -f "{{.DockerRootDir}}".

Os arquivos serão goroutine-stacks-<timestamp>.log e daemon-data-<timestamp>.log.

Observe que o daemon-data*.log pode conter informações pessoais e geralmente deve ser compartilhado somente com pessoas confiáveis do suporte. 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. Ele tem logs separados:

  • Microsoft-Windows-Hyper-V-Compute-Admin
  • Microsoft-Windows-Hyper-V-Compute-Operational

Eles podem ser visualizados 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 analíticos/de depuração do HCS

Para habilitar os logs analíticos/de depuração para o Hyper-V computá-los 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

Capturando o rastreamento detalhado do HCS

Em geral, eles são úteis somente se solicitados pelo suporte da Microsoft.

Baixe o 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çao o HcsTrace.etl ao seu contato de suporte.