Aracılığıyla paylaş


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>.logolacaktı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.