Docker: como iniciar um script no host quando o contêiner para?

Docker: como iniciar um script no host quando o contêiner para?

Gostaria de saber se é possível iniciar o script bash no host quando um contêiner docker é interrompido.

Por exemplo, gostaria de interromper um serviço quando meu contêiner estiver interrompido.

Vi que é possível capturar o sinal SIGTERM e que você pode então executar alguns comandos bash no contêiner. Talvez haja uma maneira de capturar o sinal SIGTERM na máquina host e então iniciar um script...

Responder1

Tentareventos dockerusando filtro apropriado. Ou seja

$ 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)

Responder2

Você pode usar o 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

Um exemplo de uso é semelhante a:

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

$ docker container wait test-wait
0

O segundo comando ficou suspenso até que o comando sleep do contêiner fosse concluído.

informação relacionada