¿Es que Docker Stop intenta detener el proceso que se ejecuta dentro del contenedor de la manera correcta, mientras que Docker kill enviará una señal de muerte?
Básicamente sí, la diferencia es sutil, pero se describe en la referencia de la Línea de comandos :
- docker stop : detiene un contenedor en ejecución ( envía SIGTERM y luego SIGKILL después del período de gracia ) [...] El proceso principal dentro del contenedor recibirá SIGTERM y, después de un período de gracia, SIGKILL. [énfasis mío]
- docker kill : matar un contenedor en ejecución ( enviar SIGKILL o señal especificada ) [...] El proceso principal dentro del contenedor se enviará SIGKILL, o cualquier señal especificada con la opción --signal. [énfasis mío]
Por lo tanto, stop
intenta desencadenar un apagado correcto enviando la señal POSIX estándar SIGTERM
, mientras que kill
simplemente elimina el proceso de forma predeterminada (pero también permite enviar cualquier otra señal):
La señal SIGTERM se envía a un proceso para solicitar su terminación. A diferencia de la señal SIGKILL, el proceso puede detectarla e interpretarla o ignorarla. Esto permite que el proceso realice una terminación agradable liberando recursos y guardando el estado si es apropiado. Cabe señalar que SIGINT es casi idéntico a SIGTERM.
Si bien no se aplica de ninguna manera, generalmente se espera que los procesos se manejen con SIGTERM
gracia y hagan lo correcto según sus responsabilidades; esto puede fallar fácilmente debido a que el intento de cierre correcto tarda más que el período de gracia, lo cual es algo a considerar si la integridad de los datos es primordial (por ejemplo, para bases de datos); ver, por ejemplo, SIGTERM vs. SIGKILL del Mayor Hayden para una explicación más detallada:
La aplicación puede determinar qué quiere hacer una vez que se recibe un SIGTERM. Si bien la mayoría de las aplicaciones limpiarán sus recursos y se detendrán, algunas no. Una aplicación puede configurarse para hacer algo completamente diferente cuando se recibe un SIGTERM. Además, si la aplicación está en mal estado, como esperando E / S de disco, es posible que no pueda actuar sobre la señal que se envió.