Reiniciar un contenedor con una señal específica
En este paso, aprenderás cómo reiniciar un contenedor Docker enviando una señal específica al proceso principal del contenedor. Mientras que docker restart
envía una señal de parada predeterminada (SIGTERM
) seguida de una señal de terminación (SIGKILL
) después de un tiempo de espera, es posible que necesites enviar una señal diferente dependiendo de la aplicación que se ejecute dentro del contenedor. Esto se puede lograr deteniendo primero el contenedor con una señal específica usando docker stop
y luego iniciándolo nuevamente con docker start
.
Utilicemos nuevamente el contenedor my-nginx
. Asegúrate de que esté en ejecución.
docker ps
Si no está en ejecución, inícialo:
docker start my-nginx
Ahora, detendremos el contenedor enviando la señal SIGKILL
. Esta señal termina el proceso inmediatamente sin permitir que realice ninguna operación de limpieza.
docker stop -s SIGKILL my-nginx
Deberías ver el nombre del contenedor impreso, y si ejecutas docker ps
, el contenedor ya no debería aparecer en la lista.
docker ps
El contenedor ahora está detenido. Para reiniciarlo, simplemente lo iniciamos nuevamente.
docker start my-nginx
El contenedor debería estar ahora en ejecución nuevamente. Verifica con docker ps
.
docker ps
Deberías ver my-nginx
listado con un estado de Up
.
Mientras que SIGKILL
es una detención forzosa, también puedes enviar otras señales como SIGHUP
o SIGINT
, si tu aplicación está configurada para manejarlas para cierres o recargas elegantes. Sin embargo, la configuración predeterminada del contenedor nginx
maneja SIGTERM
de manera adecuada.
Detengamos el contenedor nuevamente, esta vez usando la señal predeterminada SIGTERM
(que es la predeterminada para docker stop
si no se especifica ninguna señal).
docker stop my-nginx
Verifica que esté detenido:
docker ps
Ahora, inícialo una última vez.
docker start my-nginx
Verifica que esté en ejecución:
docker ps
Al combinar docker stop -s <signal>
y docker start
, tienes un control más granular sobre cómo se detiene un contenedor antes de ser reiniciado.