qual é a diferença entre 'docker stop' e 'docker kill'?

89

Qual é a diferença entre docker stop e docker kill ?

Afaik, ambos irão parar um contêiner em execução. Será que docker stop tenta interromper o processo dentro do contêiner da maneira correta, enquanto docker kill enviará um sinal de eliminação? Se sim, como docker stop saberia como parar corretamente o processo em execução? (Como isso difere de processo para processo)

    
por Geert-Jan 21.05.2014 / 14:54

3 respostas

85

Is it that docker stop attempts to stop the process run inside the container in the correct way, while docker kill will send a kill signal?

Basicamente sim, a diferença é sutil, mas descrita na referência Command Line :

  • docker stop : Pare um contêiner em execução ( envia SIGTERM e depois SIGKILL após período de carência ) [...] O processo principal dentro do container receberá o SIGTERM, e após um período de carência, o SIGKILL. [ênfase minha]
  • killer kill : Mate um contêiner em execução ( envia SIGKILL ou sinal especificado ) [...] O processo principal dentro do container será enviado SIGKILL, ou qualquer sinal especificado com a opção --sinal. [ênfase minha]

Portanto, stop tenta ativar um desligamento normal enviando o sinal POSIX SIGTERM padrão, enquanto kill apenas mata o processo por padrão (mas também permite enviar qualquer outro sinal):

The SIGTERM signal is sent to a process to request its termination. Unlike the SIGKILL signal, it can be caught and interpreted or ignored by the process. This allows the process to perform nice termination releasing resources and saving state if appropriate. It should be noted that SIGINT is nearly identical to SIGTERM.

Embora não seja obrigatório de qualquer maneira, espera-se que os processos manipulem SIGTERM normalmente e façam a coisa certa dependendo de suas responsabilidades - isso pode falhar facilmente devido à tentativa de desligamento normal levar mais tempo do que o período de carência, o que é algo considerar se a integridade dos dados é primordial (por exemplo, para bancos de dados); veja por exemplo SIGTERM contra o SIGKILL do Major Hayden para uma explicação mais detalhada:

The application can determine what it wants to do once a SIGTERM is received. While most applications will clean up their resources and stop, some may not. An application may be configured to do something completely different when a SIGTERM is received. Also, if the application is in a bad state, such as waiting for disk I/O, it may not be able to act on the signal that was sent.

    
por 22.05.2014 / 16:12
6

docker kill interromperá o processo / programa do ponto de entrada principal abruptamente

docker stop tentará pará-lo graciosamente (perguntará educadamente: P)

em ambos os casos, as alterações no sistema de arquivos serão mantidas (no momento de parar ou matar), então se você for docker start <container> , ele continuará a partir daí.

    
por 29.04.2017 / 16:24
0

Além das respostas adicionadas anteriormente

executando docker events após docker stop mostrar eventos

  • kill (sinal 15): onde sinal 15 = SIGTERM
  • morrer
  • pare

executando docker events após docker kill mostrar eventos

  • kill (sinal 9): onde sinal 9 = SIGKILL
  • Die (código de saída 137)

docker stop tem um tempo limite antes de matar o processo. O padrão é 10 segundos.

Esta tabela tem ainda mais detalhes.

    
por 03.11.2018 / 08:51

Tags