컨테이너 앱 문제 해결
Azure Container Apps 로그 및 구성 설정을 검토하면 Container Apps가 올바르게 작동하지 않는 경우 근본적인 문제를 밝힐 수 있습니다. 다음 가이드를 사용하면 컨테이너 앱에 대한 세부 정보를 찾고 확인하는 데 도움이 됩니다.
시나리오
다음 표에는 Azure Container Apps를 사용하는 동안 발생할 수 있는 문제와 이를 해결하기 위해 수행할 수 있는 작업이 나열되어 있습니다.
시나리오 | 설명 | actions |
---|---|---|
모든 시나리오 | 로그 보기 문제 진단 및 해결 사용 |
|
새 수정 버전을 배포하는 중에 오류 발생 | 새 수정 버전을 배포하려고 하면 오류 메시지가 나타납니다. | Container Apps가 컨테이너 이미지를 가져올 수 있는지 확인 |
프로비전이 너무 오래 걸림 | 새 수정 버전을 배포한 후 새 수정 버전의 프로비전 상태는 프로비전이고 실행 상태는 처리 중입니다. | 상태 프로브가 올바르게 구성되었는지 확인 |
수정 버전이 저하됨 | 새 수정 버전을 프로비전하는 데 10분 이상 걸립니다. 최종적으로 프로비전 상태는 프로비전됨이지만 실행 상태는 저하됨입니다. 실행 상태 도구 설명은 Details: Deployment Progress Deadline Exceeded. 0/1 replicas ready. 를 참조함 |
상태 프로브가 올바르게 구성되었는지 확인 |
엔드포인트에 대한 요청이 실패함 | 컨테이너 앱 엔드포인트가 요청에 응답하지 않습니다. | 수신 구성 검토 |
반환 상태 요청 403 | 컨테이너 앱 엔드포인트는 HTTP 오류 403(액세스 거부)으로 요청에 응답합니다. | 네트워킹 구성이 올바른지 확인 |
예상과 다른 반응 | 컨테이너 앱 엔드포인트가 요청에 응답하지만 응답이 예상과 다릅니다. | 트래픽이 올바른 수정 버전으로 라우팅되는지 확인 컨테이너 레지스트리에 이미지를 배포할 때 고유 태그를 사용하고 있는지 확인 |
누락된 매개 변수 오류 | Azure CLI에서 az containerapp 명령을 실행하거나 Azure PowerShell의 Az.App 모듈에서 cmdlet을 실행할 때 누락된 매개 변수에 대한 오류 메시지가 표시됩니다. |
최신 버전의 Azure Container Apps 확장이 설치되어 있는지 확인 |
미리 보기 기능을 사용할 수 없음 | Azure CLI에서 az containerapp 명령을 실행할 때는 미리 보기 기능을 사용할 수 없습니다. |
Azure Container Apps 확장에서 미리 보기 기능을 허용하는지 확인 |
앱 또는 환경 삭제가 작동하지 않음 | 이 문제는 종종 provisioningState: ScheduledForDelete와 같은 메시지와 함께 제공됩니다. | 연결된 VNet을 수동으로 삭제합니다. |
로그 보기
컨테이너 앱의 문제를 찾을 때 수행해야 할 첫 번째 단계 중 하나는 로그 메시지를 보는 것입니다. 콘솔 및 시스템 로그의 출력을 모두 볼 수 있습니다. 컨테이너 앱의 콘솔 로그는 앱의 stdout
및 stderr
스트림을 캡처합니다. Container Apps는 서비스 수준 이벤트에 대한 시스템 로그를 생성합니다.
- Azure Portal에 로그인합니다.
- 검색 창에 컨테이너 앱 이름을 입력합니다.
- 리소스 섹션에서 컨테이너 앱 이름을 선택합니다.
- 탐색 모음에서 모니터링을 확장하고 로그 스트림(로그 아님)을 선택합니다.
- 로그 스트림 페이지에 이 수정 버전은 0으로 조정됨이라고 표시되면 수정 버전 관리로 이동 단추를 선택합니다. 최소 복제본 수 1로 크기 조정된 새 수정 버전을 배포합니다. 자세한 내용은 Azure Container Apps의 크기 조정을 참조하세요.
- 로그 스트림 페이지에서 로그를 콘솔 또는 시스템으로 설정합니다.
문제 진단 및 해결 도구 사용
문제 진단 및 해결 도구를 사용하여 컨테이너 앱의 상태, 구성 및 성능과 관련된 문제를 찾을 수 있습니다.
- Azure Portal에 로그인합니다.
- 검색 창에 컨테이너 앱 이름을 입력합니다.
- 리소스 섹션에서 컨테이너 앱 이름을 선택합니다.
- 탐색 모음에서 문제 진단 및 해결을 선택합니다.
- 문제 진단 및 해결 페이지에서 문제 해결 범주 중 하나를 선택합니다.
- 컨테이너 앱의 문제를 해결하는 방법을 찾으려면 탐색 모음에서 범주 중 하나를 선택합니다.
컨테이너 이미지의 접근성 확인
새 수정 버전을 배포하려고 할 때 발생하는 오류 메시지가 표시되면 Container Apps가 컨테이너 이미지를 가져올 수 있는지 확인합니다.
- 컨테이너 환경 방화벽이 컨테이너 레지스트리에 대한 액세스를 차단하지 않는지 확인합니다. 자세한 내용은 사용자 정의 경로로 아웃바운드 트래픽 제어를 참조하세요.
- 기존 VNet이 기본 Azure 제공 DNS 서버 대신 사용자 지정 DNS 서버를 사용하는 경우 DNS 서버가 올바르게 구성되어 있고 컨테이너 레지스트리의 DNS 조회가 실패하지 않는지 확인합니다. 자세한 내용은 DNS를 참조하세요.
- Container Apps 클라우드 빌드 기능을 사용하여 컨테이너 이미지를 생성한 경우(Azure Container Apps의 클라우드 간 코드 경로 참조) 이미지에 공개적으로 액세스할 수 없으므로 이 섹션이 적용되지 않습니다.
콘솔 애플리케이션으로 실행될 수 있는 Docker 컨테이너의 경우 관리자 권한 명령 프롬프트에서 다음 명령을 실행하여 이미지에 공개적으로 액세스할 수 있는지 확인합니다. 이 명령을 실행하기 전에 <>
로 묶인 자리 표시자를 원하는 값으로 바꿉니다.
docker run --rm <YOUR_CONTAINER_IMAGE>
Docker가 오류를 보고하지 않고 이미지를 실행하는지 확인합니다. Windows에서 Docker를 실행 중인 경우 Docker 엔진이 실행 중인지 확인합니다.
이미지에 공개적으로 액세스할 수 없는 경우 다음 오류가 나타날 수 있습니다.
docker: Error response from daemon: pull access denied for <YOUR_CONTAINER_IMAGE>, repository does not exist or may require 'docker login': denied: requested access to the resource is denied. See 'docker run --help'.
자세한 내용은 Azure Container Apps 환경의 네트워킹을 참조하세요.
수신 구성 검토
컨테이너 앱의 수신 설정은 컨테이너 앱에 대한 외부 및 내부 트래픽 라우팅을 제어하는 규칙 집합을 통해 적용됩니다. 컨테이너 앱에 연결할 수 없는 경우 이러한 수신 설정을 검토하여 수신 설정이 요청을 차단하고 있지 않은지 확인합니다.
- Azure Portal에 로그인합니다.
- 검색 창에 컨테이너 앱 이름을 입력합니다.
- 리소스에서 컨테이너 앱 이름을 선택합니다.
- 탐색 모음에서 설정을 확장하고 수신를 선택합니다.
문제 | 작업 |
---|---|
수신이 사용하도록 설정되어 있나요? | 사용 확인란이 선택되어 있는지 확인합니다. |
외부 수신을 허용하려고 하나요? | 수신 트래픽이 어디서나 트래픽 허용으로 설정되어 있는지 확인합니다. Container Apps가 HTTP 트래픽을 수신하지 않는 경우 수신 트래픽을 Container Apps 환경으로 제한됨으로 설정합니다. |
클라이언트가 컨테이너 앱에 액세스하기 위해 HTTP 또는 TCP를 사용하나요? | 수신 형식이 올바른 프로토콜(HTTP 또는 TCP)로 설정되어 있는지 확인합니다. |
사용자의 클라이언트가 mTLS를 지원하나요? | 클라이언트가 mTLS를 지원하는 경우에만 클라이언트 인증서 모드가 필수로 설정되어 있는지 확인합니다. 자세한 내용은 클라이언트 인증서 구성 인증을 참조하세요. |
클라이언트가 HTTP/1 또는 HTTP/2를 사용하나요? | 전송이 올바른 HTTP 버전(HTTP/1 또는 HTTP/2)으로 설정되어 있는지 확인합니다. |
대상 포트가 올바르게 설정되어 있나요? | 대상 포트가 컨테이너 앱이 수신 대기하는 것과 동일한 포트 또는 컨테이너 앱의 Dockerfile에 의해 노출된 것과 동일한 포트로 설정되어 있는지 확인합니다. |
클라이언트 IP 주소가 거부되었나요? | IP 보안 제한 모드가 모든 트래픽 허용으로 설정되지 않은 경우 클라이언트에 거부된 IP 주소가 없는지 확인합니다. |
자세한 내용은 Azure Container Apps의 수신을 참조하세요.
네트워킹 구성 확인
Azure 재귀 해결 프로그램는 IP 주소 168.63.129.16
을 사용하여 요청을 해결합니다.
- VNet에서 기본 Azure 제공 DNS 서버 대신 사용자 지정 DNS 서버를 사용하는 경우 해결되지 않은 DNS 쿼리를
168.63.129.16
으로 전달하도록 DNS 서버를 구성합니다. - NSG 또는 방화벽을 구성할 때
168.63.129.16
주소를 차단하지 마세요.
자세한 내용은 Azure Container Apps 환경의 네트워킹을 참조하세요.
상태 프로브 구성 확인
TCP를 전송으로 사용하는 모든 상태 프로브 형식(활성 상태, 준비 상태 및 시작)에 대해 해당 포트 번호가 컨테이너 앱에 대해 구성한 수신 대상 포트와 일치하는지 확인합니다.
- Azure Portal에 로그인합니다.
- 검색 창에 컨테이너 앱 이름을 입력합니다.
- 리소스에서 컨테이너 앱 이름을 선택합니다.
- 탐색 모음에서 애플리케이션을 확장하고 컨테이너를 선택합니다.
- 컨테이너 페이지에서 상태 프로브를 선택합니다.
- 활동성 프로브, 준비 상태 프로브 및 시작 프로브를 확장합니다.
- 각 프로브에 대해 포트 값이 올바른지 확인합니다.
다음과 같이 포트 값을 업데이트합니다.
- 새 수정 버전을 만들려면 편집 및 배포를 선택합니다.
- 새 수정 버전 만들기 및 배포 페이지에서 컨테이너 이미지 옆에 있는 확인란을 선택하고 편집을 선택합니다.
- 컨테이너 편집 창에서 상태 프로브를 선택합니다.
- 활동성 프로브, 준비 상태 프로브 및 시작 프로브를 확장합니다.
- 각 프로브에 대해 포트 값을 편집합니다.
- 저장 단추를 선택합니다.
- 새 수정 버전 만들기 및 배포 페이지에서 만들기 단추를 선택합니다.
작동 시간 연장을 위해 상태 프로브 구성
수신을 사용하도록 설정하면 각 형식에 대해 정의되지 않은 경우 다음 기본 프로브가 주 앱 컨테이너에 자동으로 추가됩니다.
각 프로브 형식의 기본값은 다음과 같습니다.
속성 | Startup 클래스 | 준비 | 활동성 |
---|---|---|---|
프로토콜 | TCP | TCP | TCP |
포트 | 수신 대상 포트 | 수신 대상 포트 | 수신 대상 포트 |
시간 제한 | 3초 | 5초 | 해당 없음 |
Period | 1초 | 5초 | 해당 없음 |
초기 지연 | 1초 | 3초 | 해당 없음 |
성공 임계값 | 1 | 1 | 해당 없음 |
실패 임계값 | 240 | 48 | 해당 없음 |
컨테이너 앱을 시작하는 데 오랜 시간이 걸리는 경우(Java에서 일반적임) 활성 상태 및 준비 상태 프로브 초기 지연 시간(초) 속성을 적절하게 사용자 지정해야 할 수도 있습니다. 로그를 확인하여 컨테이너 앱의 일반적인 작동 시간을 확인할 수 있습니다.
- Azure Portal에 로그인합니다.
- 검색 창에 컨테이너 앱 이름을 입력합니다.
- 리소스에서 컨테이너 앱 이름을 선택합니다.
- 탐색 모음에서 애플리케이션을 확장하고 컨테이너를 선택합니다.
- 컨테이너 페이지에서 상태 프로브를 선택합니다.
- 새 수정 버전을 만들려면 편집 및 배포를 선택합니다.
- 새 수정 버전 만들기 및 배포 페이지에서 컨테이너 이미지 옆에 있는 확인란을 선택하고 편집을 선택합니다.
- 컨테이너 편집 창에서 상태 프로브를 선택합니다.
- 활동성 프로브를 확장합니다.
- 활동성 프로브 사용을 선택한 경우 초기 지연 시간(초) 값을 늘립니다.
- 준비 상태 프로브를 확장합니다.
- 준비 상태 프로브 사용을 선택한 경우 초기 지연 시간(초) 값을 늘립니다.
- 저장을 선택합니다.
- 새 수정 버전 만들기 및 배포 페이지에서 만들기 단추를 선택합니다.
그런 다음 로그를 확인하여 컨테이너 앱이 성공적으로 시작되는지 확인할 수 있습니다.
자세한 내용은 상태 프로브 사용을 참조하세요.
트래픽이 올바른 수정 버전으로 라우팅되는지 확인
컨테이너 앱이 예상대로 작동하지 않는 경우 요청이 오래된 수정 버전으로 라우팅되는 것이 문제일 수 있습니다.
- Azure Portal에 로그인합니다.
- 검색 창에 컨테이너 앱 이름을 입력합니다.
- 리소스에서 컨테이너 앱 이름을 선택합니다.
- 탐색 모음에서 애플리케이션을 확장하고 수정 버전을 선택합니다.
수정 모드가 Single
로 설정된 경우 기본적으로 모든 트래픽이 최신 수정 버전으로 라우팅됩니다. 활성 수정 버전 탭에는 트래픽 값이 100%
인 수정 버전이 하나만 나열되어야 합니다.
수정 모드가 Multiple
로 설정된 경우 트래픽을 오래된 수정 버전으로 라우팅하고 있지 않은지 확인합니다.
트래픽 분할 구성에 대한 자세한 내용은 Azure Container Apps의 트래픽 분할을 참조하세요.
최신 버전의 Azure Container Apps 확장이 설치되어 있는지 확인
Azure CLI에서 az containerapp
명령을 실행하거나 Azure PowerShell의 Az.App
모듈에서 cmdlet을 실행할 때 누락된 매개 변수에 대한 오류가 발생하는 경우 최신 버전의 Azure Container Apps 확장이 설치되어 있어야 합니다.
az extension add --name containerapp --upgrade
Azure Container Apps 확장에서 미리 보기 기능을 허용하는지 확인
Azure CLI에서 az containerapp
명령을 실행할 때 미리 보기 기능을 사용할 수 없는 경우 Azure Container Apps 확장에서 미리 보기 기능을 사용하도록 설정합니다.
az extension add --name containerapp --upgrade --allow-preview true
Azure Container Apps 환경에서 사용하는 VNet을 수동으로 삭제합니다.
provisioningState: ScheduledForDelete라는 메시지가 표시되지만 환경이 실제로 삭제되지 않는 경우 연결된 VNet을 수동으로 삭제해야 합니다.
삭제하려는 환경에서 사용되는 VNet을 식별합니다. <자리 표시자>를 해당 값으로 바꿉니다.
az containerapp env show --resource-group <RESOURCE_GROUP> --name <ENVIRONMENT>
출력에서 VNet ID를 찾아
infrastructureSubnetId
적어둡니다. VNet ID의 예는 다음과 같습니다vNet::myVNet.id
.VNet을 수동으로 삭제합니다.
az network vnet delete --resource-group <RESOURCE_GROUP> --name <VNET_ID>
Azure Container Apps 환경을 삭제합니다.
az containerapp env delete --resource-group <RESOURCE_GROUP> --name <ENVIRONMENT> --yes