¿Cómo maneja Docker el apagado del sistema?

¿Cómo maneja Docker el apagado del sistema?

Esta pregunta exacta se ha hecho antes.aquí en SOyaquí en Reddit. Sin embargo, la pregunta real nunca recibe respuesta.

Tengo nuestros servicios de Atlassian ejecutándose dentro de contenedores acoplables. Sin embargo, me pregunto qué sucede cuando emito un shutdowncomando parael anfitrión. ¿Intenta cerrar los contenedores con elegancia o intenta matarlos inmediatamente? De alguna manera, parece que no puedo encontrar recursos reales sobre esto, tal vez porque soy bastante nuevo en Docker.

Imagina lo siguiente:

  1. Tengo contenedores en ejecución
  2. Doy el shutdowncomando para apagarel anfitrión sinemitiendo explícitamentedocker stop

¿Qué hace Docker en tal escenario? ¿Puedo emitir el shutdowncomando de forma segura y esperar que mis contenedores se cierren correctamente antes que nada?

En mi caso, uso una instancia de Ubuntu Server 19.04 si eso es importante, pero la pregunta está dirigida a un escenario más general/que cubre las principales distribuciones.

Respuesta1

Sus contenedores deberían recibir un SIGTERM como todos los demás procesos del sistema.

El problema es que lo que obtiene el SIGTERM es el proceso principal en el contenedor (el que inicia ENTRYPOINT). Si el contenedor ejecuta un script para iniciar un binario, es importante que execel binario se convierta en el proceso del contenedor; de lo contrario, el intérprete de shell recibe el SIGTERM y normalmente no lo reenvía al niño.

AFAIK docker stopprimero prueba un SIGTERM en el contenedor y espera que salga en 10 segundos; de lo contrario, envía un SIGKILL. Entonces, si sus contenedores se detienen rápidamente, docker stopdebería estar bien.

Respuesta2

Hay un enfoque teórico (por @xenoid) y otro práctico.

Emita el cierre del servidor y observe lo que sucede.

  1. La consola.Aunque la red podría cortarse inmediatamente, la secuencia de apagado aún puede tardar bastante tiempo. Observe desde la consola (algunos proveedores de alojamiento proporcionan una consola virtual) cómo va: ¿cuánto tiempo dura realmente la secuencia de apagado y qué sucede mientras tanto?

  2. Los registros.Por lo que he visto, el contenedor de la base de datos suele ser la preocupación. ¿Será eliminado o terminado con gracia? La verdad está en los registros. Obsérvalos atentamente. Si inicia el sistema y ve estos registros con las marcas de tiempo de apagado, lo está haciendo bastante bien:

.

2023-08-11 14:43:21 0 [Note] InnoDB: Starting shutdown...
[...]
2023-08-11 14:43:21 0 [Note] mariadbd: Shutdown complete
  1. Configuración del tiempo de apagado.También puede investigar más a fondo cómo cambiar los parámetros de tiempo de reinicio. Ver man systemd-system.confy comprobar este párrafo: DefaultTimeoutStartSec=, DefaultTimeoutStopSec=, DefaultTimeoutAbortSec=, DefaultRestartSec=. El valor predeterminado es 90 segundos.

información relacionada