Bagikan melalui


Pemecahan Masalah

Mengalami masalah saat menyiapkan komputer Anda atau menjalankan kontainer? Kami membuat skrip PowerShell untuk memeriksa masalah umum. Silakan coba terlebih dahulu untuk melihat apa yang ditemukannya dan bagikan hasil Anda.

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

Daftar semua pengujian yang dijalankannya bersama dengan solusi umum ada dalam file Readme untuk skrip.

Jika itu tidak membantu menemukan sumber masalah, silakan lanjutkan dan posting output dari skrip Anda di Forum Kontainer. Ini adalah tempat terbaik untuk mendapatkan bantuan dari komunitas termasuk Windows Insider dan pengembang.

Menemukan Log

Ada beberapa layanan yang digunakan untuk mengelola kontainer Windows. Bagian berikutnya menunjukkan tempat mendapatkan log untuk setiap layanan.

Log Kontainer Docker

docker logs Perintah mengambil log kontainer dari STDOUT/STDERR, lokasi deposit log aplikasi standar untuk aplikasi Linux. Aplikasi Windows biasanya tidak masuk ke STDOUT/STDERR; sebagai gantinya, mereka masuk ke ETW, Log Peristiwa, atau file log, antara lain.

Log Monitor, alat opensource yang didukung Microsoft, sekarang tersedia di github. Log Monitor menjemput log aplikasi Windows ke STDOUT/STDERR. Log Monitor dikonfigurasi melalui file konfigurasi.

Penggunaan Monitor Log

LogMonitor.exe dan LogMonitorConfig.json harus disertakan dalam direktori LogMonitor yang sama.

Monitor Log dapat digunakan dalam pola penggunaan SHELL:

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

Atau pola penggunaan ENTRYPOINT:

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

Kedua contoh penggunaan membungkus aplikasi ping.exe. Aplikasi lain (seperti IIS. ServiceMonitor) dapat ditumpuk dengan Log Monitor dengan cara yang sama:

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 memulai aplikasi yang dibungkus sebagai proses anak dan memantau output STDOUT aplikasi.

Perhatikan bahwa dalam pola penggunaan SHELL instruksi CMD/ENTRYPOINT harus ditentukan dalam formulir SHELL dan bukan formulir exec. Ketika bentuk exec dari instruksi CMD/ENTRYPOINT digunakan, SHELL tidak diluncurkan, dan alat Monitor Log tidak akan diluncurkan di dalam kontainer.

Informasi penggunaan lainnya dapat ditemukan di wiki Monitor Log. Contoh file konfigurasi untuk skenario kontainer Windows utama (IIS, dll.) dapat ditemukan dalam repositori github. Konteks tambahan dapat ditemukan di posting blog ini.

Mesin Docker

Mesin Docker mencatat ke log peristiwa 'Aplikasi' Windows, bukan ke file. Log ini dapat dengan mudah dibaca, diurutkan, dan difilter menggunakan Windows PowerShell

Misalnya, ini akan menunjukkan log Docker Engine dari 5 menit terakhir yang dimulai dengan yang terlama.

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

Ini juga dapat dengan mudah disalurkan ke dalam file CSV untuk dibaca oleh alat atau spreadsheet lain.

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

Mengaktifkan pengelogan Debug

Anda juga dapat mengaktifkan pengelogan tingkat debug di Mesin Docker. Ini mungkin berguna untuk pemecahan masalah jika log reguler tidak memiliki cukup detail.

Pertama, buka Prompt Perintah yang ditingkatkan, lalu jalankan sc.exe qc docker dapatkan baris perintah saat ini untuk layanan Docker. Contoh:

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

Ambil , dan ubah saat ini BINARY_PATH_NAME:

  • Tambahkan -D ke akhir
  • Escape each " with \
  • Sertakan seluruh perintah dalam "

Kemudian jalankan sc.exe config docker binpath= diikuti dengan string baru. Contohnya:

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

Sekarang, mulai ulang layanan Docker

sc.exe stop docker
sc.exe start docker

Ini akan mencatat lebih banyak ke log peristiwa Aplikasi, jadi yang terbaik adalah menghapus -D opsi setelah Anda selesai memecahkan masalah. Gunakan langkah-langkah yang sama di atas tanpa -D dan mulai ulang layanan untuk menonaktifkan pengelogan debug.

Alternatif untuk hal di atas adalah menjalankan daemon docker dalam mode debug dari prompt PowerShell yang ditinggikan, menangkap output langsung ke dalam file.

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

Mendapatkan cadangan tumpukan

Umumnya, ini hanya berguna jika secara eksplisit diminta oleh dukungan Microsoft, atau pengembang docker. Ini dapat digunakan untuk membantu mendiagnosis situasi di mana docker tampaknya telah digantung.

Unduh docker-signal.exe.

Penggunaan:

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

File output akan terletak di docker direktori akar data sedang berjalan. Direktori defaultnya adalah C:\ProgramData\Docker. Direktori aktual dapat dikonfirmasi dengan menjalankan docker info -f "{{.DockerRootDir}}".

File akan menjadi goroutine-stacks-<timestamp>.log.

Perhatikan bahwa goroutine-stacks*.log tidak berisi informasi pribadi.

Layanan Komputasi Host

Mesin Docker bergantung pada Layanan Komputasi Host khusus Windows. Ini memiliki log terpisah:

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

Mereka terlihat dalam Pemantau Peristiwa dan juga dapat dikueri dengan PowerShell.

Contohnya:

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

Menangkap log analitik/debug HCS

Untuk mengaktifkan log analitik/debug untuk Hyper-V Compute dan menyimpannya ke 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

Menangkap pelacakan verbose HCS

Umumnya, ini hanya berguna jika diminta oleh dukungan Microsoft.

Unduh 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"

Berikan HcsTrace.etl kontak dukungan Anda.