문제 해결
컴퓨터를 설정하거나 컨테이너를 실행하는 데 문제가 있나요? 일반적인 문제를 확인하는 PowerShell 스크립트를 만들었습니다. 이 스크립트를 먼저 사용해 보고 찾는 내용과 결과를 공유해 주세요.
Invoke-WebRequest https://aka.ms/Debug-ContainerHost.ps1 -UseBasicParsing | Invoke-Expression
일반적인 솔루션과 함께 실행하는 모든 테스트 목록은 스크립트의 Readme file(추가 정보 파일)에 있습니다.
문제의 원인을 찾는 데 도움이 되지 않는 경우 스크립트 출력을 컨테이너 포럼에 게시하세요. 이 포럼은 Windows 참가자와 개발자를 비롯한 커뮤니티의 도움을 받을 수 있는 유용한 곳입니다.
로그 찾기
Windows 컨테이너를 관리하는 데 사용되는 여러 서비스가 있습니다. 다음 섹션에서는 각 서비스에 대한 로그를 확인할 수 있는 위치를 보여 줍니다.
Docker 컨테이너 로그
명령은 docker logs
Linux 애플리케이션의 표준 애플리케이션 로그 예금 위치인 STDOUT/STDERR에서 컨테이너의 로그를 가져옵니다. Windows 애플리케이션은 일반적으로 STDOUT/STDERR에 로그하지 않습니다. 대신 ETW, 이벤트 로그 또는 로그 파일에 로그합니다.
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 출력을 모니터링합니다.
SHELL 사용 패턴에서 CMD/ENTRYPOINT 명령은 exec 형식이 아닌 SHELL 형식으로 지정해야 합니다. CMD/ENTRYPOINT 명령의 exec 형식을 사용하면 SHELL이 시작되지 않으며 컨테이너 내에서 로그 모니터 도구가 시작되지 않습니다.
자세한 사용 정보는 로그 모니터 위키에서 찾을 수 있습니다. 주요 Windows 컨테이너 시나리오(IIS 등)에 대한 구성 파일 예제는 github 리포지토리 내에서 찾을 수 있습니다. 추가 컨텍스트는 이 블로그 게시물에서 찾을 수 있습니다.
Docker 엔진
Docker 엔진은 파일 대신 Windows '애플리케이션' 이벤트 로그에 기록합니다. 이러한 로그는 Windows PowerShell을 사용하여 쉽게 읽고 정렬하고 필터링할 수 있습니다.
예를 들어 가장 오래된 순서부터 시작하여 최근 5분의 Docker 엔진 로그가 표시됩니다.
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
없이 수행하고 서비스를 다시 시작하여 디버그 로깅을 사용하지 않도록 설정합니다.
위의 대안은 관리자 권한 PowerShell 프롬프트에서 디버그 모드로 docker 디먼을 실행하여 출력을 파일에 직접 캡처하는 것입니다.
sc.exe stop docker
<path\to\>dockerd.exe -D > daemon.log 2>&1
스택 덤프 가져오기
일반적으로 이는 Microsoft 지원 또는 docker 개발자가 명시적으로 요청한 경우에만 유용합니다. Docker가 중단된 것처럼 보이는 상황을 진단하는 데 사용할 수 있습니다.
docker-signal.exe다운로드합니다.
Usage:
docker-signal --pid=$((Get-Process dockerd).Id)
출력 파일은 Docker가 실행 중인 데이터 루트 디렉터리에 있습니다. 기본 디렉터리가 입니다 C:\ProgramData\Docker
. 를 실행 docker info -f "{{.DockerRootDir}}"
하여 실제 디렉터리를 확인할 수 있습니다.
파일은 입니다 goroutine-stacks-<timestamp>.log
.
개인 goroutine-stacks*.log
정보는 포함되지 않습니다.
Host Compute Service
Docker 엔진은 Windows 관련 호스트 컴퓨팅 서비스에 따라 달라집니다. 이 서비스에는 다음과 같은 별도의 로그가 있습니다.
- 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 컴퓨팅에 대한 분석/디버그 로그를 사용하도록 설정하고 에 저장 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 자세한 정보 추적 캡처
일반적으로 이러한 기능은 Microsoft 지원에서 요청한 경우에만 유용합니다.
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
.