Azure Container Apps 일반적인 배포 오류 문제 해결

이 문서는 Azure Container Apps 지원 에스컬레이션이 가장 자주 필요한 배포 실패 시나리오를 식별하고 해결하는 데 도움이 됩니다. 각 시나리오에는 증상, 포털 및 CLI 진단 단계 및 해결 방법이 포함됩니다.

빠른 참조 테이블에서 증상을 찾고 일치하는 시나리오에 대한 링크를 따릅니다.

증상 빠른 참조

증상 Scenario
프로비저닝 오류로 인해 배포가 실패하고 수정 버전이 생성되지 않음 이미지 끌어오기 실패
수정 버전이 생성되었지만 상태가 FailedDegraded 컨테이너 충돌 및 시작 오류
런타임에 비밀 또는 환경 변수가 비어 있거나 누락됨 비밀 액세스 문제
배포 중 또는 런타임에 Key Vault 참조 실패 Key Vault 참조 실패
관리 ID 호출은 401 또는 403을 반환합니다. 관리 ID 구성 오류
Init 컨테이너가 중단되거나 실패하고 앱이 시작되지 않습니다. 초기화 타이밍 문제
수정 버전은 프로비저닝되었지만 Degraded로 표시됩니다 헬스 프로브 실패
앱이 정상이지만 요청이 오류를 반환하거나 응답을 반환하지 않음 인그레스 및 트래픽 라우팅 문제
레지스트리 인증 실패(401 또는 UNAUTHORIZED) 컨테이너 레지스트리 인증

확인할 위치: 진단 관련 화면

다음 진단 화면을 사용하여 배포 실패를 조사합니다.

표면 표시되는 내용 액세스 방법
문제 진단 및 해결 일반적인 문제, 문제 해결 범주 및 안내된 분석에 대한 자동화된 탐지기입니다. Azure 포털에서 컨테이너 앱으로 이동하여 진단 및 문제 해결을 선택합니다.
시스템 로그 플랫폼 수준 이벤트: 이미지 끌어오기 상태, 프로브 결과, ID 오류, 비밀 동기화 결과. az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --type system --tail 50 또는 Log Analytics ContainerAppSystemLogs_CL 테이블.
콘솔 로그 애플리케이션 stdout/stderr: 스택 추적, 시작 메시지, 런타임 오류. az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --tail 100 또는 포털 로그 스트림 블레이드.
HTTP 로그 수신 계층 요청 로그: 상태 코드, 대기 시간, 경로, 재시도, 응답 세부 정보. 환경에서 Azure Monitor 진단 설정을 통해 옵트인합니다. ContainerAppHTTPLogs Log Analytics 테이블입니다.
수정 세부 정보 속성 provisioningState, provisioningError, healthState, runningStaterunningStateDetails. az containerapp revision show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV> -o json 또는 포털 리비전 블레이드.
배포 시간 오류 앱 수준 provisioningStateprovisioningError 수정 버전이 만들어지지 않은 경우 az containerapp show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> -o json

이미지 끌어오기 실패

이미지 끌어오기 실패는 배포 오류의 가장 일반적인 원인 중 하나입니다. 일반적으로 Azure Container Apps 사용 가능한 수정 버전을 만들 수 있기 전에 발생합니다.

Symptoms

  • 수정 버전을 만들지 않았습니다.
  • provisioningStateFailed입니다.
  • 오류 메시지에 ImagePullBackOff, UNAUTHORIZED 또는 manifest unknown가 언급됩니다.

확인할 위치: 이미지 가져오기 진단

Azure 포털에서 컨테이너 앱>수정 버전(목록이 비어 있거나 실패한 항목을 표시) > 으로 이동하여 문제를 진단하고 해결하고 "이미지"를 검색합니다.

# Check app-level provisioning state and error
az containerapp show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> \
  --query "{provisioning:properties.provisioningState, error:properties.provisioningError, latestRevision:properties.latestRevisionName}" -o json

# List revisions (expect empty or failed)
az containerapp revision list -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> \
  --query "[].{name:name, health:properties.healthState, provisioning:properties.provisioningState}" -o table

일반적인 원인 및 해결 방법

원인 오류 신호 해결 방법
이미지 태그가 없습니다. manifest unknown, tag not found 레지스트리에 정확한 태그가 있는지 확인합니다. az acr repository show-tags --name <AZURE_CONTAINER_REGISTRY_NAME> --repository <REPOSITORY_NAME>
레지스트리에 인증이 필요합니다. UNAUTHORIZED: authentication required 컨테이너 앱에서 레지스트리 자격 증명을 구성합니다. ACR 끌어오기를 위해 관리자 자격 증명 또는 관리 ID를 사용합니다. 컨테이너 레지스트리 인증을 참조하세요.
잘못된 레지스트리 호스트 이름 name unknown, DNS 확인 실패 값이 --image 올바른 <REGISTRY>.azurecr.io 호스트 이름을 사용하는지 확인합니다.
방화벽 또는 NSG가 레지스트리를 차단함 연결 시간 초과 사용자 지정 VNet을 사용하는 경우 레지스트리에 대한 아웃바운드 액세스를 확인합니다. AzureContainerRegistry 서비스 태그 또는 FQDN 규칙을 추가합니다.

컨테이너 충돌 및 시작 오류

수정 버전이 만들어지지만 워크로드가 시작되거나 계속 실행되지 않는 경우 이 섹션을 사용합니다.

Symptoms

  • 수정 버전이 생성되지만 healthStateUnhealthy입니다.
  • runningStateFailed입니다.
  • 콘솔 로그가 비어 있을 수 있습니다(출력을 작성하기 전에 컨테이너가 종료됨).

확인할 위치: 충돌 및 시작 시 진단

Azure 포털에서 컨테이너 앱>수정 버전으로 이동한 다음 실패한 수정 버전을 선택하고 이벤트 탭을 엽니다. BackOff 또는 CrashLoopBackOff 이벤트가 있는지 확인합니다.

# Inspect revision detail
az containerapp revision show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV> \
  --query "{health:properties.healthState, running:properties.runningState, details:properties.runningStateDetails, error:properties.provisioningError}" -o json

# Pull console logs (if any output was written)
az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --tail 100

# Pull system logs for platform-level events
az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --type system --tail 50

일반적인 원인 및 해결 방법

원인 오류 신호 해결 방법
시작 시 애플리케이션 충돌 콘솔 로그의 스택 추적 애플리케이션 오류를 수정합니다. 로그가 비어 있으면 stdout이 플러시되기 전에 충돌이 발생합니다. 초기 로깅을 추가하거나 런타임을 설정하여 출력 버퍼링(예: PYTHONUNBUFFERED=1)을 사용하지 않도록 설정합니다.
잘못된 명령 또는 진입점 exec format error, executable file not found 컨테이너의 commandargs가 이미지가 요구하는 사항과 일치하는지 확인하세요. properties.template.containers[].command에 대해 az containerapp revision show를 확인하십시오.
누락된 환경 변수 KeyError, undefined, Null 참조 모든 필수 env vars가 설정되어 있는지 확인합니다. 비밀 액세스 문제를 참조하세요.
리소스가 부족합니다. OOMKilled 컨테이너 az containerapp update -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --cpu 1.0 --memory 2.0Gi의 메모리 및 CPU 제한을 늘입니다.

비밀 액세스 문제

런타임에 애플리케이션 구성을 중단하는 누락되거나 빈 비밀 값을 해결하려면 이 섹션을 사용합니다.

Symptoms

  • 컨테이너가 시작되지만 예상 구성 값이 비어 있거나 누락되어 애플리케이션이 실패합니다.
  • 비밀을 참조하는 환경 변수에는 값이 없습니다.

확인할 위치: 비밀 참조 진단 정보

Azure 포털에서 컨테이너 앱>설정>비밀로 이동하여 비밀이 있는지 확인합니다. 그런 다음 , 컨테이너 앱>수정 버전으로 이동하여 수정 버전을 선택하고 컨테이너 세부 정보>환경 변수를 확인하여 참조가 올바른지 확인합니다.

# List secrets defined on the app
az containerapp secret list -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> -o table

# Show the revision template to verify env var references
az containerapp revision show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV> \
  --query "properties.template.containers[].env" -o json

일반적인 원인 및 해결 방법

원인 오류 신호 해결 방법
비밀 이름 불일치 Env var 값이 비어 있음 secretRef 환경 변수의 이름은 비밀 이름(대/소문자 구분)과 정확히 일치해야 합니다.
비밀이 정의되지 않음 알 수 없는 비밀을 참조하는 배포 오류 배포하기 전에 비밀을 정의합니다. az containerapp secret set -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --secrets mysecret=myvalue
비밀이 업데이트되었지만 수정 버전이 다시 시작되지 않음 이전 값이 유지됩니다. 새 수정 버전을 배포하거나 기존 수정 버전을 다시 시작합니다 az containerapp revision restart -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV>. 비밀만 업데이트해도 새 수정 버전이 트리거되지는 않습니다.
리비전에서 참조 중인 비밀이 삭제됨 컨테이너가 시작되지 않음 삭제된 비밀에 대한 참조를 제거하는 새 수정 버전을 배포한 다음 이전 수정 버전을 비활성화합니다.

Important

Container Apps에서 비밀은 애플리케이션 범위에서 적용되지만, 환경 변수 참조는 수정 버전 범위에서 적용됩니다. 비밀 값을 변경해도 실행 중인 수정 버전으로 자동 전파되지는 않습니다. 업데이트된 값이 적용되려면 새 수정 버전을 만들거나 기존 수정 버전을 다시 시작해야 합니다.

Key Vault 참조 실패

배포 중 또는 앱 실행 중에 Key Vault 기반 비밀이 해결되지 않는 경우 이 섹션을 사용하세요.

Symptoms

  • 배포가 실패하거나 비밀 값을 사용할 수 없습니다.
  • 시스템 로그에 Key Vault 액세스 오류가 언급됩니다.
  • provisioningError는 Key Vault 대한 인증 또는 권한 부여 실패를 언급합니다.

확인할 위치: Key Vault 액세스 진단 정보

Azure 포털에서 컨테이너 앱>설정>비밀(Key Vault 참조에서 경고 아이콘 찾기)로 이동합니다. 그런 다음 Container App>진단 및 문제 해결로 이동하여 "Key Vault"를 검색합니다.

# List secrets and check for Key Vault reference status
az containerapp secret list -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> -o json

# Verify managed identity is assigned
az containerapp identity show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME>

일반적인 원인 및 해결 방법

원인 오류 신호 해결 방법
관리 ID를 사용할 수 없음 Managed identity not configured 시스템 할당 또는 사용자 할당 관리 ID를 사용하도록 설정합니다. az containerapp identity assign -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --system-assigned
RBAC 역할 누락 Authorization failed, Access denied Key Vault에서 관리 ID에 Key Vault Secrets User 역할을 부여합니다: az role assignment create --role "Key Vault Secrets User" --assignee <IDENTITY_PRINCIPAL_ID> --scope <KEYVAULT_RESOURCE_ID>.
Key Vault 방화벽은 액세스를 차단합니다. 연결 시간 제한, ForbiddenByFirewall 컨테이너 앱 환경의 아웃바운드 IP를 Key Vault 방화벽에 추가하거나 프라이빗 엔드포인트를 구성합니다. 또한 Azure Firewall UDR을 AzureKeyVault 사용하는 경우 서비스 태그 및 login.microsoft.com FQDN을 추가합니다.
Key Vault에서 비밀이 비활성화되어 있습니다 SecretDisabled Key Vault에서 비밀 활성화: Azure Portal > Key Vault > 비밀 > 비밀 선택 > 사용하도록 설정.
잘못된 형식의 Key Vault URI SecretNotFound, InvalidUri URI 형식 확인: https://<vault>.vault.azure.net/secrets/<secret-name> 또는 https://<vault>.vault.azure.net/secrets/<secret-name>/<version>.
RBAC 역할 전파 지연 ~5분 후에 작동합니다. RBAC 변경 내용을 전파하는 데 최대 10분이 걸릴 수 있습니다. ID 토큰 캐시는 최대 24시간 동안 지속될 수 있습니다. 기다렸다가 다시 시도하거나 새 수정 버전을 배포합니다.

관리 ID 구성 오류

앱이 관리 ID를 사용하도록 구성된 경우에도 Azure 서비스에 대한 인증이 실패하는 경우 이 섹션을 사용합니다.

Symptoms

  • 애플리케이션 코드는 Azure 서비스를 호출할 때 401(권한 없음) 또는 403(금지됨)을 받습니다.
  • 관리 ID 토큰 획득에 실패합니다.

찾을 위치: ID 및 권한 부여 진단

Azure 포털에서 컨테이너 앱>설정>ID로 이동합니다(시스템 할당 ID On 또는 사용자 할당 ID가 나열되었는지 확인). 그런 다음, 역할 할당에 대한 대상 리소스의 IAM/액세스 제어 블레이드를 확인합니다.

# Verify identity configuration
az containerapp identity show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME>

# Check role assignments for the identity's principal ID
az role assignment list --assignee <PRINCIPAL_ID> --all -o table

일반적인 원인 및 해결 방법

원인 오류 신호 해결 방법
ID가 할당되지 않음 SDK에서 ManagedIdentityCredential 오류를 발생시킵니다. ID 할당: az containerapp identity assign -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --system-assigned.
잘못된 ID 사용(시스템 및 사용자 할당) 대상 리소스에서 403 오류 사용자 할당 ID를 사용하는 경우 코드 DefaultAzureCredential(managed_identity_client_id="<CLIENT_ID>")에서 클라이언트 ID를 지정합니다.
대상 리소스에 대한 역할 할당 누락 403 대상 리소스에 필요한 역할을 할당합니다(예: 스토리지 계정의 Storage Blob 데이터 기여자 ).
Init 컨테이너에는 ID가 필요하지만 사용할 수 없습니다. 인증 오류로 Init 컨테이너가 실패함 소비 전용 및 전용 워크로드 프로필 환경에서 init 컨테이너는 관리 ID를 사용할 수 없습니다 . ID에 종속된 논리를 주 컨테이너로 이동하거나 워크로드 프로필 소비 환경을 사용하고 ID에 lifecycle: Init를 설정합니다.
역할 변경 후 토큰 캐시 부실 403은 수정 후 몇 분 동안 유지됩니다. ID 토큰 캐시는 최대 24시간 동안 지속될 수 있습니다. 새 수정 버전을 배포하여 토큰 새로 고침을 강제 적용합니다.

팁 (조언)

Container Apps는 관리 ID 토큰을 획득하기 위해 내부적으로 액세스할 수 있는 REST 엔드포인트를 노출합니다. 이 엔드포인트를 직접 호출하는 대신 환경 전반에서 일관된 환경을 위해 Azure ID SDK(DefaultAzureCredential)를 사용합니다.

초기화 타이밍 문제

init 컨테이너가 시작을 차단하거나 주 컨테이너가 트래픽 서비스를 시작하기 전에 실패할 때 이 섹션을 사용합니다.

Symptoms

  • 앱이 실행 중인 상태에 도달하지 않습니다.
  • Init 컨테이너가 중단되거나 실패하는 것처럼 보입니다.
  • 시스템 로그는 init 컨테이너가 실행 중이지만 완료되지 않는 것을 보여 줍니다.

확인할 위치: init 컨테이너 진단

Azure 포털에서 컨테이너 앱 > 수정 버전으로 이동하여 수정 버전을 선택하고 이벤트 탭을 엽니다. init 컨테이너 이벤트를 찾습니다.

# Check revision running state
az containerapp revision show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV> \
  --query "{running:properties.runningState, details:properties.runningStateDetails}" -o json

# Check init container logs
az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --container <INIT_CONTAINER_NAME> --tail 100

# System logs for platform events
az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --type system --tail 50

일반적인 원인 및 해결 방법

원인 오류 신호 해결 방법
Init 컨테이너는 아직 사용할 수 없는 서비스에 따라 달라집니다. init 컨테이너 로그에서 연결이 거부되거나 시간 제한이 발생했습니다. init 컨테이너에 재시도 논리 또는 준비 검사를 추가합니다. 종속 서비스를 초기화 시 사용할 수 있다고 가정하지 마세요.
init 컨테이너가 종료되지 않습니다. 수정 사항은 Provisioning에 보관됩니다 init 컨테이너가 유한 명령을 실행하고 코드 0으로 종료되는지 확인합니다. 무한정 실행되는 Init 컨테이너는 주 컨테이너가 시작하지 못하도록 차단합니다.
Init 컨테이너에는 관리 ID가 필요합니다. init 컨테이너의 401 또는 403 사용 전용 및 전용 워크로드 프로필 환경에서는 컨테이너를 초기화하기 위해 관리 ID를 사용할 수 없습니다. 워크로드 프로필 사용 환경을 사용하거나 ID 종속 작업을 기본 컨테이너로 이동합니다.
Init 컨테이너 이미지 끌어오기 실패 이미지 끌어오기 실패와 동일한 증상 동일한 레지스트리 인증 및 이미지 태그 검사를 적용합니다.
작업 순서: 시크릿이 아직 동기화되지 않음 Init 컨테이너가 빈 비밀을 읽습니다 Key Vault 비밀 동기화는 비동기적으로 수행됩니다. init 컨테이너가 Key Vault에서 참조되는 비밀에 종속되는 경우 해당 값을 아직 사용할 수 없을 수 있습니다. init-time 종속성에 직접 비밀을 사용하거나 재시도 논리를 추가합니다.

건강 프로브 오류

수정 버전이 성공적으로 배포되었지만 프로브 검사로 인해 비정상으로 표시되거나 성능이 저하되는 경우 이 섹션을 사용합니다.

Symptoms

  • 리비전이 프로비저닝되었지만 실행 상태는 Degraded입니다.
  • 시스템 로그에 프로브 실패 세부 정보가 포함된 Unhealthy 이벤트가 표시됩니다.
  • 앱은 로컬에서 작동하지만 ACA에서 상태 검사에 실패합니다.

확인할 위치: 프로브 상태 진단

Azure Portal에서 Container App>애플리케이션>컨테이너>상태 프로브(프로브 구성 확인)로 이동합니다. 그런 다음 , 컨테이너 앱>수정 버전으로 이동하여 수정 버전을 선택하고 이벤트를 엽니다.

# Check the revision's probe configuration
az containerapp revision show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV> \
  --query "properties.template.containers[].probes" -o json

# System logs for probe failure events
az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --type system --tail 50

일반적인 원인 및 해결 방법

원인 오류 신호 해결 방법
프로브 포트가 앱 포트와 일치하지 않음 프로브가 거부된 연결을 반환합니다. 프로브 포트를 앱의 수신 대기 포트 및 인그레스 targetPort와 일치하도록 설정합니다.
앱을 시작하는 데 시간이 너무 오래 걸립니다. 앱이 준비되기 전에 프로브가 실패하고 수정 버전이 진행됩니다. Degraded 활성 상태 및 준비 상태 프로브의 initialDelaySeconds를 늘립니다. Java 앱과 공통됩니다.
프로브 경로는 200이 아닌 값을 반환합니다. HTTP 오류로 프로브 실패 상태 엔드포인트가 200을 반환하는지 확인합니다. HTTP 프로브의 경우 경로가 있는지 확인하고 올바르게 응답합니다.
앱이 init 후에만 바인딩되는 경우 TCP 프로브 앱이 수신 대기하기 전에 프로브 연결 더 높은 failureThreshold 시작 프로브를 사용하여 앱이 포트를 바인딩할 시간을 제공합니다.

기본 프로브 값

인그레스를 사용하도록 설정하고 프로브를 구성하지 않으면 ACA는 다음 기본값을 적용합니다.

Property Startup 활동성 준비 상태
Protocol TCP TCP TCP
항구 수신 대상 포트 수신 대상 포트 수신 대상 포트
초기 지연 1s 1s 3s
기간 1s 1s 5초
실패 임계값 240 48 N/A

인그레스 및 트래픽 라우팅 문제

앱이 실행 중이지만 수신 또는 수정 트래픽 설정이 잘못되어 요청이 실패하는 경우 이 섹션을 사용합니다.

Symptoms

  • 앱이 실행 중이고 정상이지만 HTTP 요청은 오류(404, 502) 또는 응답을 반환하지 않습니다.
  • 앱은 az containerapp exec에서는 작동하지만 공용 URL에서는 작동하지 않습니다.

확인할 위치: 인그레스 및 트래픽 진단

Azure 포털에서 컨테이너 앱>설정>수신으로 이동합니다. 그런 다음 , 컨테이너 앱>애플리케이션>수정 버전 으로 이동합니다(트래픽 분할 확인).

# Check ingress configuration and traffic split
az containerapp show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> \
  --query "{ingress:properties.configuration.ingress, latestReady:properties.latestReadyRevisionName}" -o json

# Verify the FQDN
az containerapp show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --query "properties.configuration.ingress.fqdn" -o tsv

일반적인 원인 및 해결 방법

원인 오류 신호 해결 방법
Ingress가 활성화되지 않음 FQDN이 할당되지 않고 앱에 연결할 수 없음 인그레스 활성화: az containerapp ingress enable -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --type external --target-port 8080 --transport auto.
대상 포트 불일치 502 잘못된 게이트웨이 targetPort을(를) 앱이 수신 대기 중인 포트와 일치하도록 설정합니다.
트래픽 가중치는 최신 수정 버전에서 0% 이전 수정 버전이 트래픽을 제공합니다. 트래픽 분할 업데이트: az containerapp ingress traffic set -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision-weight latest=100.
IP 제한은 클라이언트를 차단합니다. 403 Ingress 설정에서 IP 보안 제한을 확인하세요.
잘못된 전송(HTTP 및 TCP) 연결 오류 인그레스 유형이 앱의 프로토콜과 일치하는지 확인하세요.

컨테이너 레지스트리 인증

앱이 컨테이너 레지스트리에 인증할 수 없으므로 이미지 끌어오기 실패 시 이 섹션을 사용합니다.

Symptoms

  • UNAUTHORIZED: authentication required(으)로 인해 배포가 실패합니다.
  • 레지스트리가 태그를 확인하기 전에 요청을 거부하기 때문에 이 오류는 종종 다른 문제(예: 잘못된 이미지 태그)를 마스킹합니다.

찾을 위치: 레지스트리 인증 진단

Azure 포털에서 컨테이너 앱>설정>컨테이너로 이동합니다(레지스트리 설정 확인). 그런 다음 Container App>문제 진단 및 해결로 이동하여 "레지스트리"를 검색합니다.

# Check configured registries
az containerapp show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> \
  --query "properties.configuration.registries" -o json

# Verify ACR credentials work
az acr login --name <AZURE_CONTAINER_REGISTRY_NAME>
docker pull <AZURE_CONTAINER_REGISTRY_NAME>.azurecr.io/<REPOSITORY_NAME>:<TAG>

일반적인 원인 및 해결 방법

원인 오류 신호 해결 방법
구성된 레지스트리 자격 증명 없음 UNAUTHORIZED 레지스트리 자격 증명 추가: az containerapp registry set -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --server <AZURE_CONTAINER_REGISTRY_NAME>.azurecr.io --identity system.
ACR에서 관리자 자격 증명을 사용하지 않도록 설정 관리자 사용자로 UNAUTHORIZED 관리자 사용자 활성화: az acr update -n <AZURE_CONTAINER_REGISTRY_NAME> --admin-enabled true. 기본 설정: 대신 ACR 끌어오기용 관리 ID를 사용합니다.
관리 ID에 AcrPull 역할이 없음 UNAUTHORIZED AcrPull 역할을 할당합니다az role assignment create --role AcrPull --assignee <PRINCIPAL_ID> --scope <ACR_RESOURCE_ID>. .
잘못된 서버 호스트 이름 name unknown 레지스트리 서버가 ACR과 일치하는지 확인합니다 <your-acr>.azurecr.io. .

진단 워크플로 요약

실패한 항목이 확실하지 않은 경우 다음 시퀀스를 사용합니다.

  1. az containerapp show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> -o json을 실행합니다. provisioningState, provisioningErrorlatestRevisionName를 확인하세요.

  2. az containerapp revision list -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> -o table을 실행합니다. 목록이 비어 있으면 실패는 이미지 끌어오기 또는 템플릿 유효성 검사 문제(이미지 끌어오기 실패 및 컨테이너 레지스트리 인증)입니다. 수정 버전이 있는 경우 3단계를 계속 진행합니다.

  3. az containerapp revision show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --revision <REV> -o json을 실행합니다. healthState, runningState, runningStateDetailsprovisioningError을 확인하세요.

  4. 실행 az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --type system --tail 50 하여 프로브 오류, ID 오류 및 비밀 동기화 문제와 같은 플랫폼 수준 이벤트를 봅니다.

  5. 실행 az containerapp logs show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> --tail 100 하여 스택 추적, 구성 오류 및 연결 오류를 포함한 애플리케이션 stdout/stderr를 봅니다.

  6. 이전 단계에서 인증 관련 오류가 나타난 경우 ID 구성을 확인하려면 실행 az containerapp identity show -g <RESOURCE_GROUP_NAME> -n <CONTAINER_APP_NAME> 합니다.

포털에서 진단 및 문제 해결 사용

Container Apps 포털에는 자동화된 진단이 포함된 진단 및 문제 해결 블레이드가 포함되어 있습니다.

  1. Azure Portal에서 컨테이너 앱으로 이동합니다.
  2. 왼쪽 탐색 창에서 진단 및 문제 해결 을 선택합니다.
  3. 검색 상자를 사용하여 특정 진단 항목(예: "이미지 가져오기", "상태 프로브" 또는 "Ingress")을 찾아보세요.
  4. 안내 분석을 위해 문제 해결 범주 타일을 선택합니다.

이 블레이드는 안내 진단에 권장되는 시작점입니다. 이 문서의 모든 시나리오를 다루지는 않지만 일반적인 문제에 대한 자동화된 검사를 제공합니다.

심층 조사를 위한 Log Analytics 쿼리

CLI 출력 및 포털 진단이 충분하지 않은 경우 Log Analytics 직접 기본 로그를 쿼리합니다. 다음 두 쿼리는 플랫폼 수준 오류 및 수신 수준 HTTP 오류에 대한 가장 일반적인 시작점을 다룹니다.

시스템 수준 오류 찾기

ContainerAppSystemLogs_CL
| where RevisionName_s == "<REV>"
| where Log_s contains "BackOff" or Log_s contains "Failed" or Log_s contains "Error"
  or Reason_s == "Unhealthy"
| project TimeGenerated, Reason_s, Log_s
| order by TimeGenerated desc
| take 50

이 쿼리는 이미지 끌어오기 오류, 프로브 오류, 프로비전 오류 및 기타 플랫폼 이벤트를 보여 줍니다.

HTTP 오류 찾기(HTTP 로그를 사용하도록 설정해야 함)

인그레스 계층은 HTTP 로그를 생성하며, 사용자가 이를 사용하도록 선택합니다. Container Apps 관리 환경에서 Azure Monitor 진단 설정을 통해 이러한 로그를 사용하도록 설정합니다. 사용하도록 설정한 후 ContainerAppHTTPLogs 테이블이 Log Analytics에 표시됩니다. 테이블이 나타나려면 몇 분 정도 걸릴 수 있습니다.

ContainerAppHTTPLogs
| where TimeGenerated > ago(1h)
| where StatusCode >= 400
| project TimeGenerated, ContainerAppName, RevisionName, Method, Path,
  StatusCode, ResponseCodeDetails, RequestDuration, RequestId
| order by TimeGenerated desc
| take 100

이 쿼리는 수신 계층 HTTP 로그를 필터링하여 지난 1시간 동안 실패한 요청(상태 코드 400 이상)만 표시합니다. 타임스탬프, 앱 및 수정 버전 이름, HTTP 메서드 및 경로, 오류 상태 코드, ResponseCodeDetails 오류가 컨테이너() 또는 플랫폼(via_upstreamroute_not_found,connection_timeout), 요청 기간 및 애플리케이션 로그와 상관 관계를 지정하는 데 사용할 수 있는 고유한 요청 ID에서 발생했는지 여부를 나타내는 필드를 반환합니다.

느린 요청 분석, 수정 버전별 오류 비율, 단일 요청 추적 및 최고 실패 엔드포인트를 비롯한 더 많은 쿼리는 Log Analytics Azure Container Apps 로그 모니터링을 참조하세요.