docker コンテナ内で Systemd が pid 1 を取得できない

docker コンテナ内で Systemd が pid 1 を取得できない

継続的インテグレーション パイプラインを立ち上げようとしているのですが、そのためにはコンテナー内に abc.deb ファイルを apt でインストールする必要があります。

debian/control ファイルには以下が含まれます:

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

debian/rules ファイルには以下が含まれます (関連する部分のみを以下に紹介します)。

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

override_dh_systemd_start:
    dh_systemd_start -p<application>

override_dh_installinit:
    dh_systemd_start

私の Dockerfile は次のようになります:

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

docker 内で docker exec を実行し、 ps aux を実行すると、次の結果が得られます。

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

どうすれば systemd を PID 1 として使用できますか? つまり、dumb-init です!

複数の記事を見てみましたが、どうやらそれは不可能のようで、同じ記事で確認する必要があります。良い記事は次のとおりです (いくつか例を挙げると):

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

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

答え1

としてグレースフルリスタートコメントで述べたように、systemdベースイメージからビルドすることができます。例えば、Centos システムしかし、dockerコンテナ内でsystemdを使用することは絶対に推奨されません。私の関連する質問

依存関係を満たすためだけにsystemdが必要な場合は、より良い方法はdeb 依存関係を無視する

関連情報