Project

General

Profile

Actions

DockerInit » History » Revision 3

« Previous | Revision 3/10 (diff) | Next »
cryptogopher, 2022-04-28 21:40


Container init process

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).

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.

Usage of system's default sysvinit is hampered by following shortcomings:
  • it mostly does not respond to Unix signals, which are used by Docker to manage containers (most importantly: signal termination),
  • it does not stop properly on container stop. Attempt to stop container with init as PID 1 ends with error code 137:
    CONTAINER ID  IMAGE        COMMAND       CREATED             STATUS                      PORTS  NAMES
    b755c0f1b1d8  gentoo-base  "/sbin/init"  About a minute ago  Exited (137) 9 seconds ago         gentoo-base
    

    init process remains running afterwards:
    # docker-compose top
    gentoo-base
    UID    PID    PPID   C   STIME   TTY     TIME       CMD
    ----------------------------------------------------------
    root   3510   3489   0   17:40   ?     00:00:00   init [0]
    

Nevertheless it is possible to use sysvinit as a Docker container init process. Required steps are following:

1. Change sysvinit to exit init process on hard shutdown (runlevel 0) with following patch:

--- sysvinit-3.01/src/init.c    2021-12-13 20:21:26.000000000 +0100
+++ sysvinit-3.01/src/init.c    2022-04-18 01:21:47.966751774 +0200
@@ -2367,6 +2367,11 @@
      read_inittab();
      fail_cancel();
      setproctitle("init [%c]", (int)runlevel);
+
+      /*
+       * Exit on halt - causes Docker container to stop.
+      */
+      if (runlevel == '0') exit(0);
    }
  }
        Write_Runlevel_Log(runlevel);

2.

Updated by cryptogopher over 2 years ago · 3 revisions

Also available in: PDF HTML TXT