Systemd erhält PID 1 nicht, wenn es sich im Docker-Container befindet

Systemd erhält PID 1 nicht, wenn es sich im Docker-Container befindet

Ich versuche, eine kontinuierliche Integrationspipeline zu starten. Dazu muss ich per Apt eine abc.deb-Datei im Container installieren.

Die Datei debian/control enthält:

Depends:  ${python3:Depends}, ${misc:Depends}, python3-webpy, systemd

Die Datei debian/rules enthält (unten wird nur der relevante Teil angezeigt):

%:
dh $@  --with=python3,systemd

override_dh_systemd_start:
    dh_systemd_start -p<application>

override_dh_installinit:
    dh_systemd_start

Mein Dockerfile sieht so aus:

FROM <relevant base image>
COPY results/*.deb /packages/
RUN export DEBIAN_FRONTEND=noninteractive  && apt-get update && \
    apt-get install -y --no-install-recommends --auto-remove \
    dumb-init \
    procps \
    /packages/*.deb && \
    apt-get autoremove -y && \
    apt-get autoclean -y && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /var/cache/apt
    CMD tail -f /dev/null

Wenn ich Docker Exec im Docker ausführe und ps aux ausführe, erhalte ich:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   2388   756 ?        Ss   11:51   0:00 /bin/sh -c tail -f /dev/null

Wie kann ich systemd als PID 1 haben? Sagen wir mal „dumb-init“!

Ich habe versucht, in mehreren Artikeln nachzuschauen, aber es scheint, als sei das nicht möglich, es ist eine Bestätigung erforderlich. Die guten sind (um nur einige zu nennen):

https://lwn.net/Articles/676831/

https://blog.phusion.nl/2015/01/20/docker-und-das-pid-1-zombie-reaping-problem/

Antwort1

AlsGracefulRestartWie im Kommentar erwähnt, können Sie aus dem systemd-Basisimage erstellen. Zum Beispiel:centos-systemd. Es ist jedoch definitiv nicht empfehlenswert, systemd in einem Docker-Container zu verwenden. Schauen Sie sich meineVerwandte Frage.

Wenn Sie systemd nur zur Erfüllung von Abhängigkeiten benötigen, ist der bessere WegDeb-Abhängigkeit ignorieren.

verwandte Informationen