앱 실행이 중지된 이유는 무엇인가요?

앱을 배포한 후 앱이 잠시 실행되다가 예기치 않게 종료되는 경우가 있습니다.

다음 중 한 가지 경우에 해당하는지 판단합니다.

  1. 앱 코드에는 실행 주기가 완료되면 종료하는 기능이 포함되어 있습니다.
  2. 앱 코드에 앱이 예기치 않게 종료되는 원인이 되는 오류가 포함되어 있습니다.
  3. 앱에서 가져오는 이미지가 삭제되었거나 IBM Cloud Container Registry 이미지 보존 정책으로 인해 삭제되어 더 이상 존재하지 않습니다. 예를 들어, 수신 요청으로 인해 앱이 확장되고 있습니다. 그러나 Container Registry 이미지가 더 이상 존재하지 않기 때문에 확장에 실패합니다. 또 다른 일반적인 상황은 앱이 최신 보안 수정 사항을 받도록 예약된 워커 노드에 있는 경우입니다. Code Engine 앱을 다른 작업자 노드로 이동하려고 시도할 때 이미지를 찾을 수 없는 경우 이동이 실패하고 앱이 작동을 멈춥니다.
  4. 제공된 태그가 있는 이미지는 존재하지만 애플리케이션 수정본이 생성된 후에 덮어썼기 때문에 앱에서 가져오는 이미지가 더 이상 존재하지 않습니다. 특정 애플리케이션 리비전과 연결된 이미지는 고유한 컨테이너 레지스트리 다이제스트를 사용하며, 이 다이제스트는 애플리케이션 리비전의 수명 동안 사용됩니다. 원본 이미지와 동일한 태그를 사용하여 최신 버전의 이미지를 만들면 컨테이너 레지스트리에서 원본 이미지를 덮어씁니다. 그러나 최신 이미지의 다이제스트가 애플리케이션 개정판의 다이제스트와 다르기 때문에 Code Engine 이 최신 이미지를 찾을 수 없습니다. 애플리케이션의 새 인스턴스를 만들 수 없으며, 이 시나리오에서는 애플리케이션이 실패하게 됩니다.

다음 해결 방법을 시도하여 문제를 해결하세요.

  1. {{{site.data.keyword.codeengineshort}} 앱은 종료하지 않고 실행되도록 설계되었습니다. 앱 코드에 출구가 포함되어 있는 경우 코드를 작업으로 실행하는 것이 좋습니다.

  2. 원인을 파악하는 데 도움이 될 수 있는 메시지를 확인하세요. Code Engine 대한 로깅을 설정한 경우 로그 파일에 메시지가 포함될 수 있습니다. 로깅에 대한 자세한 정보는 로그 보기를 참조하십시오. 앱은 12단계 앱 방법론을 따라야 합니다. 예를 들어 앱이 실행 중인 Code Engine 기본 구조에 업데이트가 필요한 경우 업데이트된 인프라에 앱의 새 인스턴스가 생성됩니다. 새 앱 인스턴스가 Ready 표시되면 Code Engine 트래픽을 해당 인스턴스로 라우팅합니다. 그러면 기존 앱에 SIGTERM 메시지가 표시되어 안전하게 종료할 수 있는 시간이 주어집니다. 종료되지 않으면 Code Engine SIGKILL 메시지를 전송하고 이전 앱 인스턴스가 파괴되어 데이터가 손실될 수 있습니다.

  3. Container Registry 이미지를 다시 만든 다음 앱의 다른 인스턴스를 배포합니다. 그런 다음 Container Registry 이미지 보존 정책을 확인하여 활성 수정본에서 사용하는 이미지가 삭제되지 않도록 합니다. Code Engine 대한 툴체인 템플릿을 사용하는 경우 파이프라인 정의에 로직을 추가하여 작업 버전이 배포된 후에만 사용하지 않는 이미지 버전을 삭제할 수도 있습니다.

  4. 애플리케이션을 업데이트하여 앱의 새 버전을 만듭니다. 이미지가 동일한 태그로 푸시된 경우 애플리케이션을 업데이트하여 이 업데이트된 이미지를 사용하는 새 수정본을 만들어야 합니다.