¿Por qué mi app dejó de ejecutarse?
Después de desplegar una app, la app se ejecuta durante un tiempo y, a continuación, finaliza de forma inesperada.
Determine si uno de los casos siguientes es verdadero.
- El código de la app incluye una salida cuando completa su ciclo de ejecución.
- El código de la app contiene un error que hace que la app finalice de forma inesperada.
- La imagen de la que la app está extrayendo ya no existe porque la ha suprimido o porque la política de retención de imágenes en IBM Cloud Container Registry ha hecho que se suprimiera. Por ejemplo, la app se está escalando debido a las solicitudes de entrada. Sin embargo, el escalado falla porque la imagen ya no existe en Container Registry. Otra situación típica es si la app está en un nodo trabajador que está planificado para recibir los últimos arreglos de seguridad. Si Code Engine intenta mover la app a un nodo trabajador diferente y no puede encontrar la imagen, el movimiento falla y la app deja de funcionar.
- La imagen de la que la app está extrayendo ya no existe porque mientras existe la imagen con la etiqueta proporcionada, se sobrescribe después de que se haya creado una revisión de aplicación. La imagen que está asociada con la revisión de aplicación específica utiliza un resumen de registro de contenedor exclusivo, y este resumen se utiliza durante la vida de la revisión de aplicación. Si crea una versión más reciente de la imagen con la misma etiqueta que la imagen original, la imagen original se sobrescribe en el registro de contenedor. Sin embargo, Code Engine no puede encontrar esta imagen más reciente, porque la imagen más reciente tiene un resumen distinto al resumen de la revisión de la aplicación. No se pueden crear nuevas instancias de la aplicación, y este escenario da como resultado un error de la aplicación.
Pruebe las siguientes soluciones para resolver su problema.
-
Las apps de Code Engine están diseñadas para ejecutarse sin salir. Si el código de la app incluye una salida, considere ejecutar el código como un trabajo en su lugar.
-
Compruebe si hay mensajes que puedan ayudarle a determinar la causa. Si configura el registro para Code Engine, es posible que los archivos de registro contengan mensajes. Para obtener más información sobre el registro, consulte Visualización de registros. La app debe seguir la metodología de la app de 12 factores. Por ejemplo, si la estructura subyacente de Code Engine en la que se ejecuta la app requiere una actualización, se crea una nueva instancia de la app en la infraestructura actualizada. Cuando la nueva instancia de app se marca como
Ready, Code Engine direcciona el tráfico a la misma. A continuación, la aplicación antigua recibe un mensajeSIGTERM, lo que da tiempo a que concluya de forma segura. Si no se cierra, Code Engine envía un mensajeSIGKILLy la instancia de la app antigua se destruye, lo que puede hacer que se pierdan datos. -
Vuelva a crear la imagen en Container Registry y, a continuación, despliegue otra instancia de la app. A continuación, compruebe la política de retención de imágenes en Container Registry para que las imágenes utilizadas por las revisiones activas no se supriman. Si utiliza plantillas de cadena de herramientas para Code Engine, también puede añadir lógica a la definición de conducto para suprimir las versiones no utilizadas de la imagen sólo después de desplegar una versión de trabajo.
-
Cree una nueva revisión para la app actualizando la aplicación. Si una imagen se envía con la misma etiqueta, debe actualizar la aplicación para crear una nueva revisión que utilice esta imagen actualizada.