运行 在 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
是否可以在将 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