Skip to content

Latest commit

 

History

History
42 lines (24 loc) · 1.71 KB

README.md

File metadata and controls

42 lines (24 loc) · 1.71 KB

container-signals

Short and sweet example for using trap in BASH with Docker containers to handle signals/container stop requests

Explanation

This repository provides a script: runner.sh

This is used as an entrypoint for the container. It spawns a mock daemon (nc -l) and will trap these signals:

  • SIGTERM
  • SIGINT
  • SIGQUIT
  • SIGABRT

Once the service is running, the script uses wait for either the process to terminate, or a signal to be trapped.

tini makes this possible -- it forwards the signals it receives from the Docker daemon to the trapping script.

The _signal_handler function in the script provides a handle for the shutdown process.

This is where checking on agent work status or cleanup before/after shutdown would happen.

Note: SIGKILL cannot be trapped. This is generally used in emergency situations (out-of-memory/host machine shutdown timeout) and is unavoidable/expected.

While this uses tini as a very simple init process (PID 1) to handle spawning the actual process/pass signals, the image doesn't need to include it.

It's reportedly included with Docker when using the --init option with docker run, see upstream

Example

See below for an example of how the script in the container traps the signal, and runs through some mock cleanup steps

The left pane shows the container logs/messages, including ps output with the running process -- after the signal is trapped

While the right pane shows the stop request.

example-screen

Dependencies

  • BASH

While the provided Docker container installs tini-static, nmap-ncat, and procps-ng, these are likely not truly needed.