Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Atualizado em 2025-05-23 GMT+08:00

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}
Na saída do comando, o campo Exit Code indica o código de status quando o programa sai pela última vez. Se o valor não for 0, o programa sairá anormalmente. Você pode analisar melhor a causa com base nesse 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

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

Tabela 1 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:

  • Um sinalizador indefinido é usado no comando, por exemplo, docker run --abcd.
  • O comando definido pelo usuário na imagem tem permissão insuficiente no host local.
  • O mecanismo de contêiner é incompatível com o sistema operacional ou o hardware de host.

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:

  • O uso de memória do contêiner no pod atinge o limite de recursos. Por exemplo, falta de memória (OOM) faz com que o cgroup pare forçosamente o contêiner.
  • Se ocorrer OOM, o kernel do nó interrompe alguns processos para liberar a memória. Como resultado, o contêiner pode ser encerrado.
  • Se a verificação de integridade do contêiner falhar, o kubelet interromperá o contêiner.
  • Outros processos externos, como scripts maliciosos, param forçosamente o contêiner.

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.

Tabela 2 Sinais de interrupção padrão comuns do 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.