Será que o docker stop tenta parar o processo executado dentro do contêiner da maneira correta, enquanto o docker kill envia um sinal de kill?
Basicamente, sim, a diferença é sutil, mas descrita na referência da linha de comando :
- docker stop : Interrompa um contêiner em execução ( envie SIGTERM e depois SIGKILL após o período de carência ) [...] O processo principal dentro do contêiner receberá o SIGTERM e, após um período de carência, SIGKILL. [ênfase minha]
- docker kill : mata um contêiner em execução ( envia SIGKILL ou sinal especificado ) [...] O processo principal dentro do contêiner será enviado SIGKILL ou qualquer sinal especificado com a opção --signal. [ênfase minha]
Portanto, stop
tenta desencadear um desligamento normal enviando o sinal POSIX padrão SIGTERM
, enquanto kill
apenas mata o processo por padrão (mas também permite enviar qualquer outro sinal):
O sinal SIGTERM é enviado para um processo para solicitar seu término. Ao contrário do sinal SIGKILL, ele pode ser capturado e interpretado ou ignorado pelo processo. Isso permite que o processo execute uma finalização agradável, liberando recursos e salvando o estado, se apropriado. Note-se que o SIGINT é quase idêntico ao SIGTERM.
Embora não seja imposto de qualquer maneira, geralmente é esperado que os processos manejem SIGTERM
normalmente e façam a coisa certa, dependendo de suas responsabilidades - isso pode falhar facilmente devido à tentativa de desligamento normal que leva mais tempo do que o período de cortesia, o que é algo a considerar se a integridade dos dados for primordial (por exemplo, para bancos de dados); veja, por exemplo, SIGTERM vs. SIGKILL do major Hayden para obter uma explicação mais detalhada:
O aplicativo pode determinar o que deseja fazer quando um SIGTERM for recebido. Embora a maioria dos aplicativos limpe seus recursos e pare, outros podem não. Um aplicativo pode ser configurado para fazer algo completamente diferente quando um SIGTERM é recebido. Além disso, se o aplicativo estiver em um estado incorreto, como aguardar a E / S do disco, talvez não seja possível atuar no sinal enviado.