Risoluzione dei problemi
State problemi a configurare la vostra macchina o a eseguire un container? È stato creato uno script di PowerShell per verificare la presenza di problemi comuni. Si prega di dare un tentativo prima di vedere cosa trova e condividere i risultati.
Invoke-WebRequest https://aka.ms/Debug-ContainerHost.ps1 -UseBasicParsing | Invoke-Expression
Un elenco di tutti i test eseguiti insieme alle soluzioni comuni si trova nel file Leggimi per lo script.
Se ciò non aiuta a trovare l'origine del problema, procedi e pubblica l'output del tuo script nel forum Container. Questo è il posto migliore per ottenere assistenza dalla community, inclusi Windows Insider e sviluppatori.
Ricerca dei log
Sono disponibili più servizi usati per gestire i contenitori di Windows. Le sezioni successive illustrano dove ottenere i log per ogni servizio.
Registri dei contenitori Docker
Il comando docker logs
recupera i log di un contenitore da STDOUT/STDERR, i percorsi di deposito standard del log applicazioni per le applicazioni Linux. Le applicazioni Windows in genere non registrano su STDOUT/STDERR; registrano invece su ETW, registri eventi o file di log, tra gli altri metodi.
Log Monitor, uno strumento opensource supportato da Microsoft, è ora disponibile in github. Log Monitor collega i log delle applicazioni Windows a STDOUT/STDERR. Monitoraggio log viene configurato tramite un file di configurazione.
Uso del monitoraggio dei registri
LogMonitor.exe e LogMonitorConfig.json devono essere inclusi nella stessa directory LogMonitor.
Log Monitor può essere utilizzato in un modello di utilizzo SHELL:
SHELL ["C:\\LogMonitor\\LogMonitor.exe", "cmd", "/S", "/C"]
CMD c:\windows\system32\ping.exe -n 20 localhost
Oppure un modello di utilizzo di ENTRYPOINT:
ENTRYPOINT C:\LogMonitor\LogMonitor.exe c:\windows\system32\ping.exe -n 20 localhost
Entrambi gli utilizzi di esempio racchiudono l'applicazione ping.exe. Altre applicazioni (come ad esempio IIS.ServiceMonitor) possono essere annidate con Monitoraggio log in modo simile.
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 avvia l'applicazione incapsulata come processo figlio e monitora l'output STDOUT dell'applicazione.
Si noti che nel modello di utilizzo di SHELL l'istruzione CMD/ENTRYPOINT deve essere specificata nel modulo SHELL e non nel formato exec. Quando si usa il formato exec dell'istruzione CMD/ENTRYPOINT, SHELL non viene avviato e lo strumento Monitoraggio log non verrà avviato all'interno del contenitore.
Altre informazioni sull'utilizzo sono disponibili nel wiki Log Monitor. I file di configurazione di esempio per gli scenari di contenitori di Windows chiave (IIS e così via) sono disponibili all'interno del repository github . Altre informazioni di contesto sono disponibili in questo post di blog .
Docker Engine
Il motore Docker accede al registro eventi "Applicazione" di Windows anziché a un file. Questi log possono essere facilmente letti, ordinati e filtrati con Windows PowerShell
Ad esempio, verranno visualizzati i log del motore Docker degli ultimi 5 minuti a partire dal meno recente.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time
Questo potrebbe anche essere facilmente inviato tramite pipe in un file CSV per essere letto da un altro strumento o foglio di calcolo.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-30) | Sort-Object Time | Export-CSV ~/last30minutes.CSV
Abilitazione della registrazione di debug
È anche possibile abilitare la registrazione a livello di debug nel motore Docker. Questo può essere utile per la risoluzione dei problemi se i log regolari non hanno dettagli sufficienti.
Prima di tutto, aprire un prompt dei comandi con privilegi elevati, quindi eseguire sc.exe qc docker
per ottenere la riga di comando corrente per il servizio Docker.
Esempio:
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
Prendere il BINARY_PATH_NAME
corrente e modificarlo.
- Aggiungere un -D alla fine
- Inserisci un \ prima di ogni "
- Mettere il comando completo in "
Eseguire quindi sc.exe config docker binpath=
seguito dalla nuova stringa. Per esempio:
sc.exe config docker binpath= "\"C:\Program Files\Docker\dockerd.exe\" --run-service -D"
A questo momento, riavviare il servizio Docker
sc.exe stop docker
sc.exe start docker
In questo modo si accederà molto di più al registro eventi dell'applicazione, quindi è consigliabile rimuovere l'opzione -D
al termine della risoluzione dei problemi. Usare gli stessi passaggi precedenti senza -D
e riavviare il servizio per disabilitare la registrazione di debug.
Un'alternativa a quella precedente consiste nell'eseguire il daemon Docker in modalità di debug da un prompt di PowerShell con privilegi elevati, acquisendo l'output direttamente in un file.
sc.exe stop docker
<path\to\>dockerd.exe -D > daemon.log 2>&1
Ottenimento del dump dello stack
In genere, questo è utile solo se richiesto in modo esplicito dal supporto Tecnico Microsoft o dagli sviluppatori Docker. Può essere usato per aiutare a diagnosticare una situazione in cui Docker sembra essersi bloccato.
Scarica docker-signal.exe.
Uso:
docker-signal --pid=$((Get-Process dockerd).Id)
Il file di output sarà situato nella directory data-root in cui docker è in esecuzione. La directory predefinita è C:\ProgramData\Docker
. La directory effettiva può essere confermata eseguendo docker info -f "{{.DockerRootDir}}"
.
Il file sarà goroutine-stacks-<timestamp>.log
.
Si noti che goroutine-stacks*.log
non contiene informazioni personali.
Servizio di calcolo host
Il motore Docker dipende da un servizio di calcolo host specifico di Windows. Ha log separati:
- Microsoft-Windows-Hyper-V-Compute-Admin
- Microsoft-Windows-Hyper-V-Compute-Operational
Sono visibili nel Visualizzatore eventi e possono anche essere sottoposte a query con PowerShell.
Per esempio:
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Admin
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Operational
Acquisizione di log di analisi/debug HCS
Per abilitare i log analitici/di debug per Hyper-V Calcolo e salvarli in 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
Acquisizione della traccia dettagliata di HCS
In genere, questi sono utili solo se richiesti dal supporto Tecnico Microsoft.
Scaricare 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"
Fornire HcsTrace.etl
al contatto del supporto tecnico.