DockerInit » History » Version 2
cryptogopher, 2022-04-28 21:36
| 1 | 1 | cryptogopher | h1. Container @init@ process |
|---|---|---|---|
| 2 | |||
| 3 | To enable running multiple processes, containers require process/service management. This is normally provided by some kind of @init@ task (e.g. provided by @sysvinit@). |
||
| 4 | 2 | cryptogopher | |
| 5 | There are Docker-compatible replacements for full-fledged @init@s. Unfortunately they require either custom init scripts or service configurations. The process of migration from system provided OpenRC init scripts is time consuming and error prone. |
||
| 6 | |||
| 7 | Usage of system's default @sysvinit@ is hampered by following shortcomings: |
||
| 8 | * it mostly does not respond to Unix signals, which are used by Docker to manage containers (most importantly: signal termination), |
||
| 9 | * it does not stop properly on container stop. Attempt to stop container with @init@ as PID 1 ends with error code 137: |
||
| 10 | <pre> |
||
| 11 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
||
| 12 | b755c0f1b1d8 gentoo-base:20220415 "/sbin/init" About a minute ago Exited (137) 9 seconds ago gentoo-base |
||
| 13 | </pre> |
||
| 14 | @init@ process remains running afterwards: |
||
| 15 | <pre> |
||
| 16 | # docker-compose top |
||
| 17 | gentoo-base |
||
| 18 | UID PID PPID C STIME TTY TIME CMD |
||
| 19 | ---------------------------------------------------------- |
||
| 20 | root 3510 3489 0 17:40 ? 00:00:00 init [0] |
||
| 21 | </pre> |
||
| 22 | |||
| 23 | |||
| 24 | Nevertheless it is possible to use @sysvinit@ as a Docker container @init@ process. Required steps are following: |