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 di 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 Docker Kontainer
Perintah docker logs
mengambil log kontainer dari STDOUT/STDERR, lokasi setoran 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 menghubungkan log aplikasi Windows ke STDOUT/STDERR. Monitor Log dikonfigurasi melalui file konfigurasi.
Penggunaan Monitor Log
LogMonitor.exe dan LogMonitorConfig.json keduanya 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 disarangkan 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 menjalankan aplikasi yang dibungkus sebagai proses anak dan memantau keluaran STDOUT dari aplikasi tersebut.
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 Log Monitor. Contoh file konfigurasi untuk skenario kontainer Windows kunci (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 menampilkan 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 detail yang cukup.
Pertama, buka Command Prompt dengan hak administratif, lalu jalankan perintah sc.exe qc docker
untuk mendapatkan 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 BINARY_PATH_NAME
saat ini , dan ubah:
- Menambahkan -D ke akhir
- Loloskan setiap " dengan \
- Sertakan seluruh perintah dalam "
Kemudian jalankan sc.exe config docker binpath=
diikuti oleh string baru. Misalnya:
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 opsi -D
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 dengan hak akses administrator, menangkap output langsung ke dalam sebuah file.
sc.exe stop docker
<path\to\>dockerd.exe -D > daemon.log 2>&1
Mendapatkan stack dump
Umumnya, ini hanya berguna jika diminta secara eksplisit oleh dukungan Microsoft, atau pengembang docker. Ini dapat digunakan untuk membantu mendiagnosis situasi di mana Docker tampaknya telah menggantung.
Unduh docker-signal.exe.
Penggunaan:
docker-signal --pid=$((Get-Process dockerd).Id)
File output akan berada di direktori akar data tempat docker dijalankan. Direktori default adalah C:\ProgramData\Docker
. Direktori aktual dapat dikonfirmasi dengan menjalankan docker info -f "{{.DockerRootDir}}"
.
File akan 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 di Pemeriksa Peristiwa dan juga dapat dikueri dengan PowerShell.
Misalnya:
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 komputasi Hyper-V 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
kepada kontak dukungan Anda.