Docker: Init Systems (PID 1)
July 11, 2025
1 min read
0 views
Why does CTRL+C not kill your Docker container sometimes?
The PID 1 Problem
In Linux, PID 1 is the init system (Systemd). It has special responsibilities: 1. Reaping zombie processes. 2. Handling signals (SIGTERM, SIGINT).
When you run CMD ["python", "app.py"], Python becomes PID 1.
Python is not designed to be an init system. It might ignore SIGTERM.
The Solution: Tini
Use tini or --init flag in Docker. It inserts a tiny init process as PID 1, which spawns your app as PID 2. Tini handles the signals and forwards them correctly.
Code
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["python", "app.py"]
Conclusion
Respect the Linux process hierarchy, even inside containers.
Similar Posts
Linux: The '/proc' Filesystem
Mar 18, 2025
Git: What is HEAD?
May 01, 2025
Docker: Layers and Caching
Apr 18, 2025