Skip to content

joshlay/container-signals

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

Demonstration for signal handling in containers

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published