Dela via


Felsökning

Har du problem med att konfigurera datorn eller köra en container? Vi har skapat ett PowerShell-skript för att söka efter vanliga problem. Försök först att se vad den hittar och dela dina resultat.

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

En lista över alla tester som körs tillsammans med vanliga lösningar finns i Readme-fil för skriptet.

Om det inte hjälper att hitta orsaken till problemet kan du gå vidare och publicera utdata från skriptet på Container Forum. Det här är det bästa stället för att få hjälp från communityn, inklusive Windows Insiders och utvecklare.

Hitta loggar

Det finns flera tjänster som används för att hantera Windows-containrar. I nästa avsnitt visas var du kan hämta loggar för varje tjänst.

Docker-containerloggar

Kommandot docker logs hämtar en containers loggar från STDOUT/STDERR, depositionsplatser för standardprogramloggar för Linux-program. Windows-program loggar vanligtvis inte till STDOUT/STDERR. I stället loggar de till bland annat ETW, händelseloggar eller loggfiler.

Log Monitor, ett Microsoft-stödt opensource-verktyg, är nu tillgängligt på github. Loggövervakaren kopplar Windows-applikationsloggar till STDOUT/STDERR. Loggövervakaren konfigureras via en konfigurationsfil.

Log Monitor-användning

LogMonitor.exe och LogMonitorConfig.json bör båda ingå i samma LogMonitor-katalog.

Loggövervakaren kan antingen användas i ett SHELL-användningsmönster:

SHELL ["C:\\LogMonitor\\LogMonitor.exe", "cmd", "/S", "/C"]
CMD c:\windows\system32\ping.exe -n 20 localhost

Eller ett ENTRYPOINT-användningsmönster:

ENTRYPOINT C:\LogMonitor\LogMonitor.exe c:\windows\system32\ping.exe -n 20 localhost

Båda exempelanvändningarna omsluter ping.exe-programmet. Andra program (till exempel IIS. ServiceMonitor) kan kapslas med Log Monitor på ett liknande sätt:

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;

Log Monitor startar det omslutna programmet som en underordnad process och övervakar STDOUT-utdata för programmet.

Observera att CMD/ENTRYPOINT-instruktionen i SHELL-användningsmönstret ska anges i SHELL-formuläret och inte i exec-formuläret. När exec-formen av CMD/ENTRYPOINT-instruktionen används startas inte SHELL och log monitor-verktyget startas inte i containern.

Mer användningsinformation finns på wikin Log Monitor. Exempel på konfigurationsfiler för viktiga Windows-containerscenarier (IIS osv.) finns i github-lagringsplats. Ytterligare kontext finns i det här blogginlägget.

Docker-motor

Docker Engine loggar till Windows händelseloggen 'Program' i stället för till en fil. Dessa loggar kan enkelt läsas, sorteras och filtreras med Hjälp av Windows PowerShell

Detta visar till exempel Docker Engine-loggarna från de senaste 5 minuterna som börjar med den äldsta.

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

Detta kan också enkelt skickas till en CSV-fil som ska läsas av ett annat verktyg eller kalkylblad.

Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-30)  | Sort-Object Time | Export-CSV ~/last30minutes.CSV

Aktivera felsökningsloggning

Du kan också aktivera loggning på felsökningsnivå på Docker-motorn. Detta kan vara användbart för felsökning om de vanliga loggarna inte har tillräckligt med information.

Öppna först en kommandoprompt med administratörsrättigheter och kör sedan sc.exe qc docker för att hämta den aktuella kommandoraden för Docker-tjänsten. Exempel:

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

Ta den aktuella BINARY_PATH_NAMEoch ändra den:

  • Lägg till en -D i slutet
  • Escape each " med att \
  • Omslut hela kommandot i "

Kör sedan sc.exe config docker binpath= följt av den nya strängen. Till exempel:

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

Starta nu om Docker-tjänsten

sc.exe stop docker
sc.exe start docker

Detta loggar in mycket mer i programhändelseloggen, så det är bäst att ta bort alternativet -D när du är klar med felsökningen. Använd samma steg ovan utan -D och starta om tjänsten för att inaktivera felsökningsloggen.

Ett alternativ till ovanstående är att köra docker-daemonen i felsökningsläge från en upphöjd PowerShell-prompt och samla in utdata direkt i en fil.

sc.exe stop docker
<path\to\>dockerd.exe -D > daemon.log 2>&1

Hämta stackdump

I allmänhet är detta endast användbart om det uttryckligen begärs av Microsofts support eller docker-utvecklare. Det kan användas för att hjälpa till att diagnostisera en situation där Docker verkar ha hängt.

Ladda ned docker-signal.exe.

Användning:

docker-signal --pid=$((Get-Process dockerd).Id)

Utdatafilen finns i den datarotskatalog som docker körs i. Standardkatalogen är C:\ProgramData\Docker. Den faktiska katalogen kan bekräftas genom att köra docker info -f "{{.DockerRootDir}}".

Filen kommer att vara goroutine-stacks-<timestamp>.log.

Observera att goroutine-stacks*.log inte innehåller personlig information.

Värdcomputetjänst

Docker-motorn är beroende av en Windows-specifik värdberäkningstjänst. Den har separata loggar:

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

De visas i Loggboken och kan också efterfrågas med PowerShell.

Till exempel:

Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Admin
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Operational

Fånga HCS-analys-/felsökningsloggar

Aktivera analys-/felsökningsloggar för Hyper-V Compute och spara dem i 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

Inhämtning av utförlig spårning av HCS

I allmänhet är dessa endast användbara om de begärs av Microsoft-supporten.

Ladda ned 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"

Ange HcsTrace.etl till din supportkontakt.