Sdílet prostřednictvím


Řešení problémů

Máte potíže s nastavením počítače nebo spuštěním kontejneru? Vytvořili jsme skript PowerShellu pro kontrolu běžných problémů. Nejdřív zkuste zjistit, co najde, a nasdílet výsledky.

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

Seznam všech testů, které spouští, společně s běžnými řešeními, je v souboru Readme skriptu.

Pokud to nepomůže najít zdroj problému, pokračujte a publikujte výstup z vašeho skriptu na Container Forum. Toto je nejlepší místo, kde můžete získat pomoc od komunity, včetně účastníků programu Windows Insider a vývojářů.

Hledání protokolů

Ke správě kontejnerů Windows se používá několik služeb. Další části ukazují, kde získat protokoly pro každou službu.

Protokoly kontejnerů Docker

Příkaz docker logs načte protokoly kontejneru ze služby STDOUT/STDERR, standardních umístění pro ukládání protokolů aplikací pro linuxové aplikace. Aplikace pro Windows obvykle nezapisují do STDOUT/STDERR; místo toho zapisují do ETW, protokolů událostí nebo souborů protokolů.

Monitorování protokolů , nástroj OpenSource podporovaný Microsoftem, je nyní k dispozici na GitHubu. Monitorování protokolů přemísní protokoly aplikací systému Windows do STDOUT/STDERR. Monitor protokolů je konfigurován prostřednictvím konfiguračního souboru.

Využití monitoru protokolů

LogMonitor.exe i LogMonitorConfig.json by měly být zahrnuty do stejného adresáře LogMonitor.

Monitor protokolu lze použít v modelu použití SHELL:

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

Nebo vzor použití ENTRYPOINTu:

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

Obě ukázkové použití zahrnou aplikaci ping.exe. Jiné aplikace (například IIS.ServiceMonitor) mohou být kombinovány s Log Monitor stejným způsobem:

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;

Monitor protokolů spustí zabalenou aplikaci jako podřízený proces a monitoruje její výstup na STDOUT.

Všimněte si, že ve vzoru použití SHELL by měla být instrukce CMD/ENTRYPOINT zadána ve formátu SHELL, nikoli ve formátu exec. Při použití exec formy příkazu CMD/ENTRYPOINT se prostředí SHELL nespustí a nástroj Sledování protokolů nebude spuštěn uvnitř kontejneru.

Další informace o využití najdete na wiki Log Monitoru . Příklady konfiguračních souborů pro klíčové scénáře kontejneru Windows (IIS atd.) najdete v úložišti GitHub. Další kontext najdete v tomto blogovém příspěvku.

Docker Engine

Docker Engine zapisuje do výpisu událostí Windows 'Application', nikoli do souboru. Tyto protokoly je možné snadno číst, řadit a filtrovat pomocí Windows PowerShellu.

Zobrazí se například protokoly Modulu Dockeru za posledních 5 minut od nejstaršího.

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

Můžete ho také snadno převést do souboru CSV, aby ho mohl číst jiný nástroj nebo tabulka.

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

Povolení protokolování ladění

Protokolování na úrovni ladění můžete povolit také v modulu Dockeru. To může být užitečné pro řešení potíží, pokud běžné protokoly nemají dostatek podrobností.

Nejprve otevřete příkazový řádek se zvýšenými oprávněními a spusťte sc.exe qc docker získejte aktuální příkazový řádek pro službu Dockeru. Příklad:

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

Převezměte aktuální BINARY_PATH_NAMEa upravte ho:

  • Přidejte -D na konec
  • Každou uvozovku „“ nahraďte zpětným lomítkem a uvozovkou \„ „.
  • Uzavřete celý příkaz do uvozovek " "

Potom spusťte sc.exe config docker binpath= následovaný novým řetězcem. Například:

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

Teď restartujte službu Dockeru.

sc.exe stop docker
sc.exe start docker

Tím se do protokolu událostí aplikace zapíše mnohem více, proto je nejlepší po dokončení řešení potíží odebrat možnost -D. Stejný postup použijte bez -D a restartujte službu a zakažte protokolování ladění.

Alternativou k výše uvedenému je spuštění démona Dockeru v režimu ladění z příkazového řádku PowerShellu se zvýšenými oprávněními a zachytávání výstupu přímo do souboru.

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

Získání výpisu zásobníku

Obecně platí, že to je užitečné jenom v případě, že o to výslovně požádali podporu Microsoftu nebo vývojáře Dockeru. Dá se použít k pomoci při diagnostice situace, kdy se zdá, že se Docker zasekl.

Stáhnout docker-signal.exe.

Použití

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

Výstupní soubor bude umístěn v kořenovém adresáři dat, kde běží docker. Výchozí adresář je C:\ProgramData\Docker. Skutečný adresář lze potvrdit spuštěním docker info -f "{{.DockerRootDir}}".

Soubor bude pojmenován goroutine-stacks-<timestamp>.log.

Upozorňujeme, že goroutine-stacks*.log neobsahuje osobní údaje.

Hostitelská výpočetní služba

Modul Dockeru závisí na výpočetní službě hostitele specifické pro Windows. Obsahuje samostatné protokoly:

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

Jsou viditelné v Prohlížeči událostí a můžou se také dotazovat pomocí PowerShellu.

Například:

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

Zachytávání analytických a ladicích protokolů HCS

Pro povolení analytických/ladicích protokolů pro Hyper-V Compute a jejich následné uložení do 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

Zachycení podrobného trasování HCS

Obecně platí, že jsou užitečné jenom v případě, že o to požádá podpora Microsoftu.

Stáhnout 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"

Poskytněte kontaktu podpory HcsTrace.etl.