Código indicando que o contêiner sai anormalmente
Quando um contêiner não é iniciado ou encerrado, o código de saída é registrado pelos eventos do Kubernetes para relatar a causa. Esta seção descreve como localizar falhas usando um código de saída.
Exibir um código de saída
Você pode usar o kubectl para se conectar ao cluster e executar o seguinte comando para verificar o pod:
kubectl describe pod {pod name}
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
Códigos de saída
Os códigos de saída variam de 0 a 255.
- Se o código de saída for 0, o contêiner sairá normalmente.
- Geralmente, a saída anormal é causada pelo programa e esses códigos de saída variam de 1 a 128. Em cenários especiais, o código de saída varia de 129 a 255.
- Quando um programa sai devido a interrupções externas, o código de saída varia de 129 a 255. Quando o sistema operacional envia um sinal de interrupção para o programa, o código existe é o valor do sinal de interrupção mais 128. Por exemplo, se o valor do sinal de interrupção do SIGKILL for 9, o código de status de saída será 137 (9 + 128).
- Se o código existente não estiver no intervalo de 0 a 255, por exemplo, exit(-1), o código de saída será automaticamente convertido em um valor que esteja dentro do intervalo de 0 a 255.
Se o código existente for um número positivo, a fórmula de conversão será a seguinte:
code % 256
Se o código de saída for um número negativo, a fórmula de conversão será a seguinte:
256 - (|code| % 256)
Para obter detalhes, consulte Códigos de saída com significados especiais.
Códigos comuns de saída
Código de saída |
Nome |
Descrição |
---|---|---|
0 |
Normal exit. |
O contêiner sai normalmente. Esse código de status não indica necessariamente que ocorre uma exceção. Quando não há processo no recipiente, 0 também pode ocorrer. |
1 |
Common program error. |
Existem muitas causas para esta exceção, a maioria das quais são causadas por programas. Você precisa localizar ainda mais a causa com base nos logs do contêiner. |
125 |
The container is not running. |
As possíveis causas são as seguintes:
|
126 |
Command calling error. |
O comando chamado na imagem não pode ser executado. Por exemplo, a permissão de arquivo é insuficiente ou o arquivo não pode ser executado. |
127 |
The file or directory cannot be found. |
O arquivo ou diretório especificado na imagem não pode ser encontrado. |
137 |
Immediate termination (SIGKILL) |
O programa é encerrado pelo sinal SIGKILL. As causas comuns são as seguintes:
|
139 |
Segmentation error (SIGSEGV) |
O contêiner recebe o sinal SIGSEGV do sistema operacional porque o contêiner tenta acessar um local de memória não autorizado. |
143 |
Graceful termination (SIGTERM) |
O contêiner é encerrado corretamente de acordo com a indicação do host. Em geral, esse código de saída não requer solução de problemas. |
255 |
The exit code is out of range. |
O código de saída do contentor está fora do alcance. Por exemplo, exit(-1) pode ser usado para saída anormal, e -1 é automaticamente convertido para 255. Mais solução de problemas é necessária. |
Sinal de interrupção padrão do Linux
Você pode executar o comando kill -l para visualizar os sinais e valores correspondentes no sistema operacional Linux.
Sinal |
Valor |
Ação |
Descrição |
---|---|---|---|
SIGHUP |
1 |
Term |
Enviado quando a conexão do terminal do usuário (normal ou anormal) termina. |
SIGINT |
2 |
Term |
Sinal de término do programa, que é enviado pelo terminal pressionando Ctrl+C. |
SIGQUIT |
3 |
Core |
Semelhante ao SIGINT, o comando de saída é enviado pelo terminal. Geralmente, o comando de saída é controlado pressionando Ctrl+\. |
SIGILL |
4 |
Core |
Instrução inválida, geralmente porque ocorre um erro no arquivo executável. |
SIGABRT |
6 |
Core |
Sinal gerado quando a função abortar é invocada. O processo termina de forma anormal. |
SIGFPE |
8 |
Core |
Ocorre um erro aritmético de ponto flutuante. Outros erros aritméticos como o divisor 0 também ocorrem. |
SIGKILL |
9 |
Term |
Encerre qualquer processo. |
SIGSEGV |
11 |
Core |
Tentativa de acessar um local de memória não autorizado. |
SIGPIPE |
13 |
Term |
O tubo está desconectado. |
SIGALRM |
14 |
Term |
Indicar o tempo do relógio. |
SIGTERM |
15 |
Term |
Sinal final do processo, que geralmente é a saída normal do programa. |
SIGUSR1 |
10 |
Term |
Este é um sinal definido pelo usuário em aplicações. |
SIGUSR2 |
12 |
Term |
Este é um sinal definido pelo usuário em aplicações. |
SIGCHLD |
17 |
Ign |
Este sinal é gerado quando um subprocesso termina ou é interrompido. |
SIGCONT |
18 |
Cont |
Retomar um processo interrompido. |
SIGSTOP |
19 |
Stop |
Suspender a execução de um processo. |
SIGTSTP |
20 |
Stop |
Parar um processo. |
SIGTTIN |
21 |
Stop |
O processo em segundo plano lê o valor de entrada do terminal. |
SIGTTOU |
22 |
Stop |
O processo em segundo plano lê o valor de saída do terminal. |