Sorun giderme
Makinenizi ayarlarken veya bir container çalıştırırken sorun mu yaşıyorsunuz? Yaygın sorunları denetlemek için bir PowerShell betiği oluşturduk. Lütfen önce ne bulduğunu görmek için deneyin ve sonuçlarınızı paylaşın.
Invoke-WebRequest https://aka.ms/Debug-ContainerHost.ps1 -UseBasicParsing | Invoke-Expression
Betiğin çalıştırdığı tüm testlerin listesi ve yaygın çözümler, BeniOku dosyasında bulunmaktadır.
Eğer bu, sorunun kaynağını bulmaya yardımcı olmazsa, lütfen betiğinizin çıktısını Container Forumgönderin. Burası, Windows Insider'lar ve geliştiriciler de dahil olmak üzere topluluktan yardım almak için en iyi yerdir.
Günlükleri Bulma
Windows kapsayıcılarını yönetmek için kullanılan birden çok hizmet vardır. Sonraki bölümlerde her hizmet için günlüklerin nereden alınacağı gösterilir.
Docker Kapsayıcı Günlükleri
docker logs
komutu, Linux uygulamaları için standart uygulama günlüğü depozito konumları olan STDOUT/STDERR'den bir kapsayıcının günlüklerini getirir. Windows uygulamaları genellikle STDOUT/STDERR'de oturum açmaz; bunun yerine ETW, Olay Günlükleri veya günlük dosyalarında oturum açarlar.
Microsoft tarafından desteklenen bir açık kaynak aracı olan Günlük İzleyicisi artık github'da kullanılabilir. Günlük İzleyicisi, Windows uygulama günlüklerini STDOUT/STDERR'ye köprüler. Günlük İzleyicisi bir yapılandırma dosyası aracılığıyla yapılandırılır.
Kayıt İzleyicisi Kullanımı
LogMonitor.exe ve LogMonitorConfig.json aynı LogMonitor dizinine eklenmelidir.
Günlük İzleyicisi bir SHELL kullanım düzeninde kullanılabilir:
SHELL ["C:\\LogMonitor\\LogMonitor.exe", "cmd", "/S", "/C"]
CMD c:\windows\system32\ping.exe -n 20 localhost
Veya ENTRYPOINT kullanım deseni:
ENTRYPOINT C:\LogMonitor\LogMonitor.exe c:\windows\system32\ping.exe -n 20 localhost
Her iki örnek kullanım da ping.exe uygulamasını sarmalar. Diğer uygulamalar (örneğin IIS.ServiceMonitor), Log Monitor ile benzer şekilde iç içe geçirilebilir:
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;
Günlük İzleyicisi, sarmalanan uygulamayı bir alt işlem olarak başlatır ve uygulamanın STDOUT çıktısını izler.
SHELL kullanım deseninde, CMD/ENTRYPOINT yönergesinin exec formu yerine SHELL formunda belirtilmesi gerektiğini unutmayın. CMD/ENTRYPOINT yönergesinin exec biçimi kullanıldığında, SHELL başlatılmaz ve Günlük İzleyicisi aracı kapsayıcı içinde başlatılmaz.
Daha fazla kullanım bilgisi Günlük İzleyicisi wiki'de bulunabilir. Temel Windows kapsayıcı senaryoları (IIS, vb.) için örnek yapılandırma dosyaları github deposunda bulunabilir. Bu blog gönderisinde ek bağlam bulunabilir.
Docker Altyapısı
Docker Motoru, bir dosyaya değil, Windows 'Application' olay günlüğüne kaydeder. Bu günlükler Windows PowerShell kullanılarak kolayca okunabilir, sıralanabilir ve filtrelenebilir
Örneğin, en eskisinden başlayarak son 5 dakikadaki Docker Altyapısı günlükleri gösterilir.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time
Bu, başka bir araç veya elektronik tablo tarafından okunmak üzere bir CSV dosyasına kolayca aktarılabilir.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-30) | Sort-Object Time | Export-CSV ~/last30minutes.CSV
Hata ayıklama günlüğünü etkinleştirme
Docker Motoru'nda hata ayıklama seviyesinde günlüğe kaydetmeyi de etkinleştirebilirsiniz. Normal günlüklerde yeterli ayrıntı yoksa bu sorun giderme için yararlı olabilir.
İlk olarak, yükseltilmiş bir Komut İstemi açın, ardından Docker hizmeti için geçerli komut satırını almak sc.exe qc docker
çalıştırın.
Örnek:
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
Geçerli BINARY_PATH_NAME
'ı alın ve üzerinde değişiklik yapın.
- Sona -D ekleyin
- Her bir " işaretini \ ile kaçır.
- Komutun tamamını " içine alın
Önce sc.exe config docker binpath=
'ı çalıştırın, sonrasında yeni dizeyi çalıştırın. Örneğin:
sc.exe config docker binpath= "\"C:\Program Files\Docker\dockerd.exe\" --run-service -D"
Şimdi Docker hizmetini yeniden başlatın
sc.exe stop docker
sc.exe start docker
Bu, Uygulama olay günlüğünde çok daha fazla oturum açar, bu nedenle sorun giderme işlemini tamamladıktan sonra -D
seçeneğini kaldırmak en iyisidir.
-D
olmadan yukarıdaki adımların aynısını kullanın ve hata ayıklama günlüğünü devre dışı bırakmak için hizmeti yeniden başlatın.
Yukarıdakilerin alternatifi, docker daemon'u yükseltilmiş bir PowerShell isteminden hata ayıklama modunda çalıştırmak ve çıkışı doğrudan bir dosyaya yakalamaktır.
sc.exe stop docker
<path\to\>dockerd.exe -D > daemon.log 2>&1
Yığın dökümü alınıyor
Genel olarak, bu yalnızca Microsoft desteği veya docker geliştiricileri tarafından açıkça isteniyorsa kullanışlıdır. Docker'ın kilitlendiği bir durumu tanılamaya yardımcı olmak için kullanılabilir.
docker-signal.exeindirin.
Kullanım:
docker-signal --pid=$((Get-Process dockerd).Id)
Çıkış dosyası, docker'ın çalıştığı veri kök dizininde bulunur. Varsayılan dizin C:\ProgramData\Docker
. Gerçek dizin docker info -f "{{.DockerRootDir}}"
çalıştırılarak doğrulanabilir.
Dosya goroutine-stacks-<timestamp>.log
olacaktır.
goroutine-stacks*.log
kişisel bilgiler içermediğini unutmayın.
Ana Bilgisayar İşlem Hizmeti
Docker Altyapısı, Windows'a özgü bir Konak İşlem Hizmeti'ne bağlıdır. Ayrı günlükleri vardır:
- Microsoft-Windows-Hyper-V-Compute-Admin
- Microsoft-Windows-Hyper-V-Compute-Operational
Bunlar Olay Görüntüleyicisi'nde görünür ve PowerShell ile de sorgulanabilir.
Mesela:
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Admin
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Operational
HCS analiz/hata ayıklama günlüklerini yakalama
Hyper-V İşlem için analiz/hata ayıklama günlüklerini etkinleştirin ve bunları hcslog.evtx
'e kaydedin.
# 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
HCS detaylı izlemeyi yakalama
Genel olarak, bunlar yalnızca Microsoft desteği tarafından istenirse yararlıdır.
HcsTraceProfile.wprp dosyasını indir
# Enable tracing
wpr.exe -start HcsTraceProfile.wprp!HcsArgon -filemode
# <reproduce your issue>
# Capture to HcsTrace.etl
wpr.exe -stop HcsTrace.etl "some description"
Destek kişinize HcsTrace.etl
sağlayın.