Quiero cuando escribo en mi consola:
docker ^a docker container^ stopPara ejecutar un script antes de terminar. ¿es eso posible?
El comando docker stop primero intenta detener un contenedor en ejecución enviando una señal SIGTERM al proceso raíz (PID 1) en el contenedor. Si el proceso no ha salido dentro del período de tiempo de espera, se enviará una señal SIGKILL.
En la práctica, eso significa que debe definir un script ENTRYPOINT, que interceptará (atrapará) la señal SIGTERM y ejecutará cualquier lógica de apagado según corresponda.
Un script de punto de entrada de muestra puede verse así:
#!/bin/bash #Define cleanup procedure cleanup() { echo "Container stopped, performing cleanup..." } #Trap SIGTERM trap 'cleanup' SIGTERM #Execute a command "${@}" & #Wait wait $!(el manejo de la señal de shell, con respecto a la espera , se explica con un poco más de detalles aquí )
Tenga en cuenta que con el punto de entrada anterior, la lógica de limpieza solo se ejecutará si el contenedor se detiene explícitamente, si desea que también se ejecute cuando el proceso/comando subyacente se detenga solo (o falle), puede reestructurarlo de la siguiente manera.
... #Trap SIGTERM trap 'true' SIGTERM #Execute command "${@}" & #Wait wait $! #Cleanup cleanup