Docker: ¿cómo iniciar un script en el host cuando el contenedor se detiene?

Docker: ¿cómo iniciar un script en el host cuando el contenedor se detiene?

Me gustaría saber si es posible iniciar un script bash en el host cuando se detiene un contenedor acoplable.

Por ejemplo, me gustaría detener un servicio cuando se detiene mi contenedor.

Vi que es posible captar la señal SIGTERM y que luego puedes ejecutar algunos comandos bash en el contenedor. Tal vez haya una manera de captar la señal SIGTERM en la máquina host y luego ejecutar un script...

Respuesta1

Intentareventos acoplablesutilizando el filtro adecuado. Es decir

$ docker events --filter 'container=alpine-bash' --filter 'event=stop'
> 2019-07-26T17:25:35.944807432+04:00 container stop 5db8ba01c4ca26b4417bd080d9022b74893a865eefe22dc987f8d18fda104f39 (image=yikaus/alpine-bash, name=alpine-bash)

Respuesta2

Puedes usar el docker container waitcomando:

$ docker container wait --help

Usage:  docker container wait CONTAINER [CONTAINER...]

Block until one or more containers stop, then print their exit codes

Un ejemplo de uso es el siguiente:

$ docker run -d --rm --name test-wait busybox sleep 10
9ca77ac5121690110e8fdf58e73583918fa9b1a5de56ab89eb70cc89be97f3fa

$ docker container wait test-wait
0

El segundo comando se suspendió hasta que finalizó el comando de suspensión del contenedor.

información relacionada