Определение

Эта опция позволяет запустить в контейнере небольшую систему инициализации в контейнере с целью избавления от зомби-процессов Напомню, что в контейнере по умолчанию родительским процессом выступает не systemd/init, а значение из ENTRYPOINT/CMD

Где использовать? Например, в Ansible Execution-Environment — контейнер для запуска плейбука или таски в AWX, при запуске этого контейнера есть немалая вероятность того, что в ходе выполнения плейбука появится куча зомби процессов и в итоге может появиться ошибка fork error с остановкой плейбука/таски (см. пикрил)

Ansible Zombies

Docker

В Docker используется tini:

sudo apt install tini

docker run -it --init busybox sh
/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 /sbin/docker-init -- sh
    7 root      0:00 sh
    9 root      0:00 ps
/ # exit

Podman

В Podman используется catatonit, но также есть опция --init-path, для указания пути к другой системе инициализации:

sudo apt install catatonit

podman run -it --init busybox sh
/ # ps
PID   USER     TIME  COMMAND
    1 root      0:00 /run/podman-init -- sh
    7 root      0:00 sh
    8 root      0:00 ps
/ # exit

# Можно запустить с tini вместо catatonit
podman run -it --init --init-path /usr/bin/tini busybox sh

Entrypoint

На самом деле --init просто подставляет бинарь системы инициализации в инструкцию ENTRYPOINT (в самое начало), для добавления в образ через Dockerfile/Containerfile:

FROM busybox:latest

ENTRYPOINT ["/usr/bin/tini"]