Docker的dumb-init有多重要?

我希望这个问题不会primarily opinion-based ,但有一个客观的答案。

我已经阅读了dumb-init,一个Docker容器的init系统介绍,它广泛地描述了为什么以及如何使用dumb-init 。 说实话,对于那些对Linux进程结构不太熟练的人来说,这听起来相当戏剧化,而且如果你不使用dumb-init话,就好像你正在做的事情是完全错误的。

这就是为什么我正在考虑在我自己的Docker镜像中使用它的原因是什么让我无法做到这一点是事实,我还没有find一个官方的Docker镜像使用它。

  • 以mongo为例:他们直接调用mongod
  • 以postgres为例:他们直接调用postgres
  • 以节点为例,他们直接调用node

如果dumb-init 如此重要 – 为什么显然没有人使用它? 我在这里错过了什么?

如果你有一个产生新进程的进程,而你没有很好的信号处理程序来捕获子信号,并且如果你的进程应该被停止,那么停止你的孩子,就可以使用类似dumb-init或tini的东西。

如果你的进程没有产生新的进程(例如,Node.js),那么这可能不是必须的。

我想MongoDB,PostgreSQL,…可能运行subprocess有很好的信号处理程序实现。 否则会有僵尸进程,有人提出了一个问题来解决这个问题。

唯一的问题可能是官方的语言图像,如节点,ruby,golang。 他们没有愚蠢的初始化/蒂尼,因为你通常不需要他们。 但是,开发人员可能会执行错误的子代码执行代码来修复信号处理程序或使用帮助程序作为PID 1。