运行 在 Dockerfile 中,systemd 为 pid 1

RUN in Dockerfile with systemd as pid 1

是否可以在将 systemd 作为 pid 1 的情况下在 dockerfile 中使用 RUN

我正在尝试执行一个安装脚本,该脚本要求 systemd 存在并且 运行 在系统上的 dockerfile 中。即

FROM debian:stable  

RUN apt install -y systemd

RUN someInstallScriptThatRequiresSystemd.sh

Is it possible to use RUN in a dockerfile while having systemd as pid 1?

没有。每个 RUN 命令通常 运行 在它自己的容器中,命令本身(或 sh -c 包装器 Docker 提供)将是 pid 1.

另请记住,Docker 图像不包含 运行ning 进程,仅包含文件系统图像和说明如何 运行 容器的元数据。您无法使用 systemd 或其他服务 运行ning 来保存映像,并且由于映像不包含 运行ning 服务,因此在 [=26] 中重新启动服务没有意义=]文件.

Systemd 想要控制很多 的事情,其中​​大部分是容器不应该考虑的主机级事情。您通常根本不应该 运行 它在容器中;如果必须的话,更好的设置会删除大部分内置的系统设置任务。更好的是使用像 supervisord 这样的轻量级主管;更好的办法是 运行 每个容器一个进程,如果需要的话,还有一个像 tini 这样的最小初始化。

如果你只需要让这个安装程序 运行 systemctl,你可以使那个“命令”存在:

RUN ln -s /bin/true /sbin/systemctl
RUN systemctl restart my-service # does nothing, successfully