Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Возникли проблемы с настройкой компьютера или запуском контейнера? Мы создали скрипт PowerShell для проверки распространенных проблем. Попробуйте сначала увидеть, что он находит и поделиться результатами.
Invoke-WebRequest https://aka.ms/Debug-ContainerHost.ps1 -UseBasicParsing | Invoke-Expression
Список всех тестов, которые выполняются, вместе с общими решениями находится в файле Readme для скрипта .
Если это не поможет найти источник проблемы, можете опубликовать результаты выполнения вашего скрипта на форуме Контейнеров. Это лучшее место, чтобы получить помощь от сообщества, включая участников программы предварительной оценки Windows и разработчиков.
Поиск журналов
Существует несколько служб, которые используются для управления контейнерами Windows. В следующих разделах показано, где получить журналы для каждой службы.
Журналы контейнеров Docker
Команда docker logs
извлекает журналы контейнера из STDOUT/STDERR, стандартных расположений журналов приложений для приложений Linux. Приложения Windows обычно не регистрируются в STDOUT/STDERR; вместо этого они регистрируются в ETW, журналах событий или файлах журналов, среди прочего.
Log Monitor, поддерживаемый Microsoft инструмент с открытым исходным кодом, теперь доступен на сайте GitHub. Монитор журналов связывает журналы приложений Windows с STDOUT/STDERR. Монитор журналов настраивается с помощью файла конфигурации.
Использование монитора журналов
LogMonitor.exe и LogMonitorConfig.json должны быть включены в один каталог LogMonitor.
Монитор журналов можно использовать в шаблоне использования SHELL:
SHELL ["C:\\LogMonitor\\LogMonitor.exe", "cmd", "/S", "/C"]
CMD c:\windows\system32\ping.exe -n 20 localhost
Или шаблон использования ENTRYPOINT:
ENTRYPOINT C:\LogMonitor\LogMonitor.exe c:\windows\system32\ping.exe -n 20 localhost
Оба примера использования охватывают приложение ping.exe. Другие приложения (например, IIS.ServiceMonitor) можно вложить с помощью Монитора Журналов подобным образом:
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;
Монитор журналов запускает обёрнутое приложение в качестве дочернего процесса и отслеживает выходные данные STDOUT этого приложения.
Обратите внимание, что в шаблоне использования ОБОЛОЧКИ инструкция CMD/ENTRYPOINT должна быть указана в формате SHELL, а не в формате exec. Если используется форма exec инструкции CMD/ENTRYPOINT, оболочка не запускается, и средство "Мониторинг журналов" также не будет запущено внутри контейнера.
Дополнительную информацию об использовании можно найти на вики монитора журналов . Примеры файлов конфигурации для ключевых сценариев контейнеров Windows (IIS и т. д.) можно найти в репозитории github. Дополнительные контексты можно найти в этой записи блога .
Подсистема Docker
Подсистема Docker регистрирует журнал событий Windows Application, а не в файл. Эти журналы можно легко считывать, сортировать и фильтровать с помощью Windows PowerShell
Например, в этом случае будут отображаться журналы подсистемы Docker за последние 5 минут, начиная с самого старого.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-5) | Sort-Object Time
Это также может быть легко передано в CSV-файл для чтения другим средством или электронной таблицей.
Get-EventLog -LogName Application -Source Docker -After (Get-Date).AddMinutes(-30) | Sort-Object Time | Export-CSV ~/last30minutes.CSV
Включение ведения журнала отладки
Вы также можете включить ведение журнала на уровне отладки в подсистеме Docker. Это может быть полезно для устранения неполадок, если обычные журналы не имеют достаточно подробных сведений.
Сначала откройте командную строку с повышенными привилегиями, а затем запустите sc.exe qc docker
получите текущую командную строку для службы Docker.
Пример:
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
Возьмите текущий BINARY_PATH_NAME
и измените его:
- Добавьте -D в конец
- Экранируйте каждую " с помощью \
- Заключите всю команду в "
Затем запустите sc.exe config docker binpath=
, а затем новую строку. Например:
sc.exe config docker binpath= "\"C:\Program Files\Docker\dockerd.exe\" --run-service -D"
Теперь перезапустите службу Docker
sc.exe stop docker
sc.exe start docker
Это будет записывать намного больше в журнал событий приложения, поэтому рекомендуется удалить параметр -D
после завершения устранения неисправностей. Выполните те же действия, описанные выше без -D
, и перезапустите службу, чтобы отключить ведение журнала отладки.
Альтернативным вариантом выше является запуск управляющей программы Docker в режиме отладки из командной строки PowerShell с повышенными привилегиями, записывая выходные данные непосредственно в файл.
sc.exe stop docker
<path\to\>dockerd.exe -D > daemon.log 2>&1
Получение дампа стека
Как правило, это полезно только при явном запросе поддержки Майкрософт или разработчиков Docker. Его можно использовать для диагностики ситуации, когда Docker, кажется, завис.
Скачайте docker-signal.exe.
Употребление:
docker-signal --pid=$((Get-Process dockerd).Id)
Выходной файл будет находиться в корневом каталоге данных, в котором работает Docker. Каталог по умолчанию — C:\ProgramData\Docker
. Фактический каталог можно подтвердить, выполнив docker info -f "{{.DockerRootDir}}"
.
Файл будет goroutine-stacks-<timestamp>.log
.
Обратите внимание, что goroutine-stacks*.log
не содержит личные сведения.
Служба вычислений узла
Docker Engine зависит от Windows-специфической Host Compute Service. В нем есть отдельные журналы:
- Microsoft-Windows-Hyper-V-Compute-Admin
- Microsoft-Windows-Hyper-V-Compute-Operational
Они видны в средстве просмотра событий и также могут запрашиваться с помощью PowerShell.
Например:
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Admin
Get-WinEvent -LogName Microsoft-Windows-Hyper-V-Compute-Operational
Запись журналов аналитики и отладки HCS
Чтобы включить журналы аналитики и отладки для компонента Hyper-V Compute и сохранить их в 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
Запись подробной трассировки HCS
Как правило, они полезны только при запросе поддержки Майкрософт.
Загрузите 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"
Предоставьте HcsTrace.etl
вашему контакту службы поддержки.