I'm trying to execute a piece of code when the user presses Ctrl+C
in a Bash script, which makes an HTTP request to the running Docker container and saves the result to a local directory, before the container shuts down.
I've read on other posts that to prevent Ctrl+C
being sent to child processes, I can use trap
, like so:
function sigint_handler () {
echo "Saving container state..."
curl "http://localhost:$CONTAINER_PORT/api/state" > container_state.json
exit
}
trap sigint_handler INT
docker-compose up
However, this doesn't seem to be working. It looks like docker-compose
is receiving the Ctrl+C
and getting shut down first, then my SIGINT
handler is executing:
^CGracefully stopping... (press Ctrl+C again to force)
Stopping metrics_grafana_1 ... done
Stopping metrics_prometheus_1 ... done
Saving container state...
How can I get my SIGINT
handler to execute, then send SIGINT
to docker-compose
?