Rozwiązywanie problemów
Masz problemy z konfigurowaniem maszyny lub uruchamianiem kontenera? Utworzyliśmy skrypt programu PowerShell, aby sprawdzić typowe problemy. Spróbuj najpierw zobaczyć, co znajdzie i udostępnić wyniki.
Invoke-WebRequest https://aka.ms/Debug-ContainerHost.ps1 -UseBasicParsing | Invoke-Expression
Lista wszystkich testów, które są uruchamiane wraz z typowymi rozwiązaniami, znajduje się w pliku Readme dla skryptu.
Jeśli to nie pomoże znaleźć źródła problemu, proszę kontynuować i zamieścić dane wyjściowe z Twojego skryptu na forum kontenera . Jest to najlepsze miejsce, aby uzyskać pomoc od społeczności, w tym testerów systemu Windows i deweloperów.
Znajdowanie logów
Istnieje wiele usług używanych do zarządzania kontenerami systemu Windows. W następnych sekcjach pokazano, gdzie pobrać dzienniki dla każdej usługi.
Dzienniki kontenera platformy Docker
Polecenie docker logs
pobiera logi kontenera z STDOUT/STDERR, standardowych lokalizacji dzienników aplikacji dla aplikacji systemu Linux. Aplikacje systemu Windows zazwyczaj nie logują się do STDOUT/STDERR; zamiast tego logują się do plików ETW, dzienników zdarzeń lub plików dziennika, między innymi.
Monitor dzienników, narzędzie opensource obsługiwane przez firmę Microsoft, jest teraz dostępne w witrynie GitHub. Monitor dzienników łączy dzienniki aplikacji systemu Windows z dziennikami STDOUT/STDERR. Monitor dzienników jest konfigurowany za pośrednictwem pliku konfiguracji.
Użycie narzędzia do monitorowania dzienników
LogMonitor.exe i LogMonitorConfig.json powinny być uwzględnione w tym samym katalogu LogMonitor.
Monitor dzienników może być używany w trybie działania powłoki:
SHELL ["C:\\LogMonitor\\LogMonitor.exe", "cmd", "/S", "/C"]
CMD c:\windows\system32\ping.exe -n 20 localhost
Lub wzorzec użycia programu ENTRYPOINT:
ENTRYPOINT C:\LogMonitor\LogMonitor.exe c:\windows\system32\ping.exe -n 20 localhost
Oba przykładowe użycia obejmują aplikację ping.exe. Inne aplikacje (takie jak IIS.ServiceMonitor) można zagnieżdżać z Log Monitorem w podobny sposób:
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 logów uruchamia opakowaną aplikację jako proces podrzędny i obserwuje dane wyjściowe STDOUT tej aplikacji.
Należy pamiętać, że we wzorcu użycia SHELL instrukcja CMD/ENTRYPOINT powinna być określona w formie SHELL, a nie w formie exec. Gdy używana jest forma exec w instrukcji CMD/ENTRYPOINT, powłoka nie jest uruchamiana, a narzędzie Monitor logów nie zostanie uruchomione wewnątrz kontenera.
Więcej informacji o użyciu można znaleźć w wikipedii monitora logów . Przykładowe pliki konfiguracji dla kluczowych scenariuszy kontenera systemu Windows (IIS itp.) można znaleźć w repozytorium github. Dodatkowy kontekst można znaleźć w tym wpisie na blogu .
Docker Engine
Silnik Docker rejestruje do dziennika zdarzeń "Aplikacja" w systemie Windows, zamiast do pliku. Te dzienniki można łatwo odczytywać, sortować i filtrować przy użyciu programu Windows PowerShell
Na przykład spowoduje to wyświetlenie dzienników silnika Docker z ostatnich 5 minut, zaczynając od najstarszych.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time
Można to również łatwo przesłać potokiem do pliku CSV, aby można je było odczytać za pomocą innego narzędzia lub arkusza kalkulacyjnego.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-30) | Sort-Object Time | Export-CSV ~/last30minutes.CSV
Włączanie rejestrowania debugowania
Możesz również włączyć rejestrowanie na poziomie debug w silniku Docker. Może to być przydatne w przypadku rozwiązywania problemów, jeśli zwykłe dzienniki nie mają wystarczającej ilości szczegółów.
Najpierw otwórz wiersz polecenia z podwyższonym poziomem uprawnień, a następnie uruchom polecenie sc.exe qc docker
pobierz bieżący wiersz polecenia dla usługi Docker.
Przykład:
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
Weź aktualny BINARY_PATH_NAME
i go zmodyfikuj:
- Dodaj -D na końcu
- Poprzedzaj każdy znak " znakiem \
- Ujmij całe polecenie w "
Następnie uruchom sc.exe config docker binpath=
, a potem nowy ciąg. Na przykład:
sc.exe config docker binpath= "\"C:\Program Files\Docker\dockerd.exe\" --run-service -D"
Teraz uruchom ponownie usługę Platformy Docker
sc.exe stop docker
sc.exe start docker
Spowoduje to znacznie więcej logowań w dzienniku zdarzeń aplikacji, dlatego najlepiej jest usunąć opcję -D
po zakończeniu rozwiązywania problemów. Wykonaj te same kroki bez -D
i uruchom ponownie usługę, aby rejestrowanie debug zostało wyłączone.
Alternatywą dla powyższego jest uruchomienie demona platformy Docker w trybie debugowania z poziomu wiersza polecenia programu PowerShell z podwyższonym poziomem uprawnień, przechwytywanie danych wyjściowych bezpośrednio do pliku.
sc.exe stop docker
<path\to\>dockerd.exe -D > daemon.log 2>&1
Uzyskiwanie zrzutu stosu
Ogólnie rzecz biorąc, jest to przydatne tylko wtedy, gdy jest to jawnie wymagane przez pomoc techniczną firmy Microsoft lub deweloperów platformy Docker. Może służyć do diagnozowania sytuacji, w której platforma Docker wydaje się być zawieszona.
Pobierz docker-signal.exe.
Użycie
docker-signal --pid=$((Get-Process dockerd).Id)
Plik wyjściowy zostanie umieszczony w katalogu głównym danych, w którym docker jest uruchomiony. Domyślny katalog to C:\ProgramData\Docker
. Rzeczywisty katalog można potwierdzić, uruchamiając docker info -f "{{.DockerRootDir}}"
.
Plik zostanie goroutine-stacks-<timestamp>.log
.
Należy pamiętać, że goroutine-stacks*.log
nie zawiera danych osobowych.
Hostowanie usługi obliczeniowej
Silnik Docker zależy od usługi obliczeniowej hosta specjalnego dla Windows. Ma oddzielne dzienniki:
- Microsoft-Windows-Hyper-V-Compute-Admin
- Microsoft-Windows-Hyper-V-Compute-Operational
Są one widoczne w Podglądzie zdarzeń i mogą być również odpytywane za pomocą programu PowerShell.
Na przykład:
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Admin
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Operational
Przechwytywanie dzienników analityki/debugowania HCS
Aby włączyć logi analityczne i debugowania dla Hyper-V Compute oraz zapisać je 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
Przechwytywanie szczegółowego śledzenia HCS
Ogólnie rzecz biorąc, są one przydatne tylko w przypadku żądania pomocy technicznej firmy Microsoft.
Pobierz 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"
Podaj HcsTrace.etl
do kontaktu z pomocą techniczną.