Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2023-08-08 GMT+08:00

Códigos de salida

Cuando un contenedor no se inicia o termina, los eventos de Kubernetes registran el código de salida para informar de la causa. En esta sección se describe cómo localizar fallas con un código de salida.

Consulta de un código de salida

Puede usar kubectl para conectarse al clúster y ejecutar el siguiente comando para comprobar el pod:

kubectl describe pod {pod name}
En la salida del comando, el campo Exit Code indica el código de estado de la última salida del programa. Si el valor no es 0, el programa sale anormalmente. Puede analizar más a fondo la causa con este código.
Containers: 
  container-1: 
    Container ID: ... 
    Image: ... 
    Image ID: ... 
    Ports: ... 
    Host Ports: ... 
    Args: ... 
    State: Running    
      Started: Sat, 28 Jan 2023 09:06:53 +0000 
    Last State: Terminated    
      Reason: Error    
      Exit Code: 255    
      Started: Sat, 28 Jan 2023 09:01:33 +0000    
      Finished: Sat, 28 Jan 2023 09:05:11 +0000 
    Ready: True 
    Restart Count: 1

Descripción

El código de salida varía de 0 a 255.

  • Si el código de salida es 0, el contenedor sale normalmente.
  • Generalmente, la salida anormal es causada por el programa y tal código de salida varía de 1 a 128. En escenarios especiales, el código de salida varía de 129 a 255.
  • Cuando un programa sale debido a interrupciones externas, el código de salida varía de 129 a 255. Cuando el sistema operativo envía una señal de interrupción al programa, el código existente es el valor de señal de interrupción más 128. Por ejemplo, si el valor de señal de interrupción de SIGKILL es 9, el código de estado de salida es 137 (9 + 128).
  • Si el código existente no está en el rango de 0 a 255, por ejemplo, exit(-1), el código de salida se convierte automáticamente en un valor que está dentro del rango de 0 a 255.

    Si el código existente es un número positivo, la fórmula de conversión es la siguiente:

    code % 256

    Si el código de salida es un número negativo, la fórmula de conversión es la siguiente:

    256 - (|code| % 256)

Para obtener más información, consulte Códigos de salida con significados especiales.

Códigos de salida comunes

Tabla 1 Códigos de salida comunes

Código de salida

Nombre

Descripción

0

Salida normal

El contenedor sale normalmente. Este código de estado no indica necesariamente que se produce una excepción. Cuando no hay ningún proceso en el contenedor también se puede mostrar 0.

1

Error de programa común

Hay muchas causas para esta excepción, la mayoría de las cuales son causadas por el programa. Necesita localizar la causa con los logs de contenedor. Por ejemplo, este error se produce cuando se ejecuta una imagen x86 en un nodo de Arm.

125

El contenedor no se está ejecutando.

Las causas posibles son:

  • Se utiliza un indicador indefinido en el comando, por ejemplo, docker run --abcd.
  • El comando definido por el usuario en la imagen no tiene permisos suficientes en el host local.
  • El motor de contenedor no es compatible con el sistema operativo host o hardware.

126

Error de llamada al comando

El comando llamado en la imagen no se puede ejecutar. Por ejemplo, el permiso de archivo es insuficiente o el archivo no se puede ejecutar.

127

No se puede encontrar el archivo o directorio.

No se puede encontrar el archivo o directorio especificado en la imagen.

128

Parámetro de salida no válido

El contenedor sale pero no se proporciona ningún código de salida válido. Esto puede deberse a múltiples motivos. Es necesario localizar aún más la causa. Por ejemplo, una aplicación que se ejecuta en el nodo de containerd intenta invocar al comando de docker.

137

Terminación inmediata (SIGKILL)

El programa es terminado por la señal SIGKILL. Las causas comunes son las siguientes:

  • El uso de memoria del contenedor en el pod alcanza el límite de recursos. Por ejemplo, la falta de memoria (OOM) hace que cgroup detenga el contenedor por la fuerza.
  • Si ocurre OOM, el núcleo del nodo detiene algunos procesos para liberar la memoria. Como resultado, el contenedor puede terminarse.
  • Si la comprobación de estado contenedor falla, kubelet detiene el contenedor.
  • Otros procesos externos, como scripts maliciosos, detienen el contenedor por la fuerza.

139

Error de segmentación (SIGSEGV)

El contenedor recibe la señal SIGSEGV del sistema operativo porque el contenedor intenta acceder a una ubicación de memoria no autorizada.

143

Terminación agraciada (SIGTERM)

El contenedor se cierra correctamente según las instrucciones del host. Generalmente, este código de salida 143 no requiere solución de problemas.

255

El código de salida está fuera de rango.

El código de salida de contenedor está fuera de rango. Por ejemplo, la salida (-1) puede usarse para una salida anormal, y -1 se convierte automáticamente en 255.

Se requiere más solución de problemas.

Señal de interrupción estándar de Linux

Puede ejecutar el comando kill -l para ver las señales y los valores correspondientes en el SO Linux.

Tabla 2 Señales de interrupción estándar de Linux comunes

Señal

Valor

Acción

Confirmación

SIGHUP

1

Term

Se envía cuando finaliza la conexión del terminal de usuario (normal o anormal).

SIGINT

2

Term

Señal de terminación del programa, que es enviada por el terminal pulsando Ctrl+C.

SIGQUIT

3

Core

De manera similar a SIGINT, el terminal envía el comando exit. Generalmente, el commando de salida se controla pulsando Ctrl+\.

SIGILL

4

Core

Instrucción no válida, generalmente porque se produce un error en el archivo ejecutable.

SIGABRT

6

Core

Señal generada cuando se invoca la función abortar. El proceso termina anormalmente.

SIGFPE

8

Core

Se produce un error aritmético de coma flotante. También se producen otros errores aritméticos como el divisor 0.

SIGKILL

9

Term

Se termina cualquier proceso.

SIGSEGV

11

Core

Intento de acceder a una ubicación de memoria no autorizada.

SIGPIPE

13

Term

La tubería está desconectada.

SIGALRM

14

Term

Indica la temporización del reloj.

SIGTERM

15

Term

Señal de fin de proceso, que suele ser la salida normal del programa.

SIGUSR1

10

Term

Esta es una señal definida por el usuario en las aplicaciones.

SIGUSR2

12

Term

Esta es una señal definida por el usuario en las aplicaciones.

SIGCHLD

17

Ign

Esta señal se genera cuando un subproceso finaliza o se interrumpe.

SIGCONT

18

Cont

Reanuda un proceso detenido.

SIGSTOP

19

Stop

Suspender la ejecución de un proceso.

SIGTSTP

20

Stop

Detener un proceso.

SIGTTIN

21

Stop

El proceso en segundo plano lee el valor de entrada del terminal.

SIGTTOU

22

Stop

El proceso en segundo plano lee el valor de salida del terminal.