在 docker 容器中時 Systemd 未取得 pid 1

在 docker 容器中時 Systemd 未取得 pid 1

我正在嘗試啟動持續整合管道,這需要我在容器內安裝 abc.deb 檔案。

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 ?曾經說過愚蠢的初始化!

我嘗試查看多篇文章,似乎不可能,需要確認相同的內容。好的方面是(僅舉幾例):

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

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

答案1

作為優雅重啟評論中提到,您可以從 systemd 基礎映像建置。例如,centos-systemd 系統。但絕對不建議在 docker 容器內使用 systemd。看看我的相關問題

如果您只需要 systemd 來滿足依賴關係,那麼更好的方法是忽略 deb 依賴

相關內容