如何在Dockerfile中安装需要重启的内容?

Fer*_*rti 6 docker dockerfile

假设我有如下安装说明:

  1. 做点什么。
  2. 重新启动计算机。
  3. 做其他事情。

如何在Dockerfile中表达这一点?

BMi*_*tch 4

这完全取决于他们为什么需要重新启动。对于 Linux,重新启动计算机通常表示内核修改,尽管也可能是为了更简单的事情,例如更改用户权限(可以通过注销并再次重新登录来处理)。如果安装尝试对内核进行操作系统级别更改,则在容器内完成时应该会失败。默认情况下,容器会隔离并限制应用程序对正在运行的主机操作系统执行的操作,这会影响主机或其他正在运行的容器。

如果重新启动是为了强制应用程序服务重新启动,您应该意识到这种设计不能很好地映射到容器,因为每个 RUN 命令仅在隔离环境中运行该命令。通过仅运行该命令,这也表明通常在操作系统启动时启动的任何操作系统服务(cron、sendmail 或您的应用程序)将不会在容器中启动。因此,除了重新启动任何依赖服务之外,您还需要找到一种运行安装命令的方法。

我能想到的最后一个场景是他们希望不同的用户权限对登录用户生效。在这种情况下,下一个 RUN 命令将使用先前 RUN 命令更改的访问权限来运行请求的命令。因此,您无需采取任何特定操作来重新启动,只需执行安装步骤,就好像每个步骤之间都完全重新启动一样。

  • 使用 Dockerfile 来构建映像,这正是每条 RUN 行所发生的情况。Dockerfile 只是使结果易于重现。使用提交步骤手动构建映像类似于在 cli 上运行 50 个命令,而不是编写 shell 脚本,最终您会搞乱列表中的命令之一,并且不知道是什么出了问题。 (2认同)