ДиагностикаTroubleshooting

Возникли проблемы при настройке компьютера или запуске контейнера?Having trouble setting up your machine or running a container? Для PowerShell был создан скрипт для проверки наличия распространенных проблем.We created a PowerShell script to check for common problems. Попробуйте использовать его и поделитесь своими результатами.Please give it a try first to see what it finds and share your results.

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

Список всех запускаемых тестов вместе с распространенными решениями находится в файле сведений скрипта.A list of all of the tests it runs along with common solutions is in the Readme file for the script.

Если это не поможет найти источник проблемы, опубликуйте результаты из скрипта на форуме по контейнерам.If that doesn't help find the source of the problem, please go ahead and post the output from your script on the Container Forum. Это наилучший способ получить помощь от сообщества, в том числе от участников программы предварительной оценки Windows и разработчиков.This is the best place to get help from the community including Windows Insiders and developers.

Нахождение журналовFinding Logs

Существует несколько служб, используемых для управления контейнерами Windows.There are multiple services that are used to manage Windows containers. В следующих разделах показано, где найти журналы каждой из служб.The next sections shows where to get logs for each service.

Журналы контейнеров DOCKERDocker Container Logs

docker logsКоманда извлекает журналы контейнера из stdout/stderr, стандартные расположения депозита журнала приложений для приложений Linux.The docker logs command fetches a container's logs from STDOUT/STDERR, the standard application log deposit locations for Linux applications. Приложения Windows обычно не выполняют вход в STDOUT/STDERR; Вместо этого они регистрируются в ETW, журналах событий или файлах журналов.Windows applications typically do not log to STDOUT/STDERR; instead, they log to ETW, Event Logs, or log files, among others.

Монитор журнала, поддерживаемый корпорацией Майкрософт инструмент конвертер, теперь доступен на сайте GitHub.Log Monitor, a Microsoft-supported opensource tool, is now available on github. Монитор журнала связывает журналы приложений Windows с STDOUT/STDERR.Log Monitor bridges Windows application logs to STDOUT/STDERR. Монитор журнала настраивается с помощью файла конфигурации.Log Monitor is configured via a config file.

Журнал использования монитораLog Monitor Usage

LogMonitor.exe и LogMonitorConfig.jsдолжны быть включены в один и тот же каталог Логмонитор.LogMonitor.exe and LogMonitorConfig.json should both be included in the same LogMonitor directory.

Монитор журнала может использоваться в шаблоне использования оболочки:Log Monitor can either be used in a SHELL usage pattern:

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

Или шаблон использования ENTRYPOINT:Or an ENTRYPOINT usage pattern:

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

Оба примера использования заключают приложение ping.exe.Both example usages wrap the ping.exe application. Другие приложения (например, IIS). Сервицемонитор) может быть вложен с монитором журнала подобным образом:Other applications (such as IIS.ServiceMonitor) can be nested with Log Monitor in a similar fashion:

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 приложения.Log Monitor starts the wrapped application as a child process and monitors the STDOUT output of the application.

Обратите внимание, что в шаблоне использования оболочки инструкция CMD/ENTRYPOINT должна быть указана в форме оболочки и не Exec.Note that in the SHELL usage pattern the CMD/ENTRYPOINT instruction should be specified in the SHELL form and not exec form. Если используется Exec-форма инструкции CMD/ENTRYPOINT, ОБОЛОЧКа не запускается, а средство "монитор журналов" не запускается в контейнере.When exec form of the CMD/ENTRYPOINT instruction is used, SHELL is not launched, and the Log Monitor tool will not be launched inside the container.

Дополнительные сведения об использовании можно найти на вики-сайте монитора журнала.More usage information can be found on the Log Monitor wiki. Примеры файлов конфигурации для ключевых сценариев контейнеров Windows (IIS и т. д.) можно найти в репозитории GitHub.Example config files for key Windows container scenarios (IIS, etc.) can be found within the github repo. Дополнительный контекст можно найти в этой записи блога.Additional context can be found in this blog post.

Модуль DockerDocker Engine

Подсистема Docker записывает сообщения в журнал событий приложений Windows, а не в файл журнала.The Docker Engine logs to the Windows 'Application' event log, rather than to a file. Эти журналы можно легко прочитать, отсортировать и отфильтровать с помощью Windows PowerShell.These logs can easily be read, sorted, and filtered using Windows PowerShell

Например, следующая команда выведет записи журнала подсистемы Docker за последние 5 минут, начиная с самой ранней.For example, this will show the Docker Engine logs from the last 5 minutes starting with the oldest.

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

Эти записи легко перенаправить в CSV-файл, чтобы открыть их в другой программе или редакторе электронных таблиц.This could also easily be piped into a CSV file to be read by another tool or spreadsheet.

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

Включение ведения журналов отладкиEnabling Debug logging

Вы можете также включить ведение журналов на уровне отладки в подсистеме Docker.You can also enable debug-level logging on the Docker Engine. Это может помочь в устранении проблем, если в обычных журналах недостаточно подробностей.This may be helpful for troubleshooting if the regular logs don't have enough detail.

Сначала откройте командную строку с повышенными привилегиями, а затем запустите sc.exe qc docker, чтобы отобразилась текущая командная строка службы Docker.First, open an elevated Command Prompt, then run sc.exe qc docker get the current command line for the Docker service. ПримерExample:

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, и измените ее:Take the current BINARY_PATH_NAME, and modify it:

  • Добавьте в конец "-D".Add a -D to the end
  • Добавьте экранирующий символ "" для каждой кавычки (").Escape each " with </span>
  • Заключите всю команду в кавычки (").Enclose the whole command in "

После запустите sc.exe config docker binpath=, добавив новую строку.Then run sc.exe config docker binpath= followed by the new string. Например:For example:

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

Теперь перезапустите службу Docker.Now, restart the Docker service

sc.exe stop docker
sc.exe start docker

В журнале событий приложений появится гораздо больше записей, поэтому рекомендуется удалить параметр -D после завершения устранения проблем.This will log much more into the Application event log, so it's best to remove the -D option once you are done troubleshooting. Выполните действия, указанные выше, без -D и перезапустите службу, чтобы отключить ведение журналов отладки.Use the same steps above without -D and restart the service to disable the debug logging.

Альтернативным решением является запуск управляющей программы Docker в режиме отладки из командной строки PowerShell с правами администратора и записью данных вывода непосредственно в файл.An alternate to the above is to run the docker daemon in debug mode from an elevated PowerShell prompt, capturing output directly into a file.

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

Получение дампа стекаObtaining stack dump

Как правило, это полезно, только если они явно запрошены службой поддержки Майкрософт или разработчиками DOCKER.Generally, this is only useful if explicitly requested by Microsoft support, or docker developers. Его можно использовать для диагностики ситуации, когда DOCKER кажется зависым.It can be used to assist diagnosing a situation where docker appears to have hung.

Скачайте файл docker-signal.exe.Download docker-signal.exe.

Использование:Usage:

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

Выходной файл будет находиться в корневом каталоге данных, в котором выполняется DOCKER.The output file will be located in the data-root directory docker is running in. Каталогом по умолчанию является C:\ProgramData\Docker.The default directory is C:\ProgramData\Docker. Фактическое расположение можно проверить, выполнив команду docker info -f "{{.DockerRootDir}}".The actual directory can be confirmed by running docker info -f "{{.DockerRootDir}}".

Файл будет иметь значение goroutine-stacks-<timestamp>.log .The file will be goroutine-stacks-<timestamp>.log.

Обратите внимание, что goroutine-stacks*.log не содержит персональных данных.Note that goroutine-stacks*.log does not contain personal information.

Служба вычисления узловHost Compute Service

Подсистема Docker зависит от службы контейнера узлов конкретной версии Windows.The Docker Engine depends on a Windows-specific Host Compute Service. Она содержит отдельные журналы:It has separate logs:

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

Они отображаются в Просмотр событий, и их также можно запросить с помощью PowerShell.They are visible in Event Viewer and may also be queried with PowerShell.

Например:For example:

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

Запись журналов аналитики/отладки службы HCSCapturing HCS analytic/debug logs

Включите запись журналов аналитики/отладки для вычисления Hyper-V с их сохранением в файле hcslog.evtx.To enable analytic/debug logs for Hyper-V Compute and save them to 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

Запись подробной трассировки службы HCSCapturing HCS verbose tracing

Как правило, эти данные запрашивает только служба поддержки Майкрософт.Generally, these are only useful if requested by Microsoft support.

Скачайте файл HcsTraceProfile.wprpDownload 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 специалисту службы поддержки.Provide HcsTrace.etl to your support contact.