我希望这个问题不会被标记为 primarily opinion-based
,但有一个客观的答案。
我已经阅读了 Introducing dumb-init, an init system for Docker containers ,它广泛地描述了为什么以及如何使用 dumb-init
。老实说,对于对 Linux 进程结构的工作原理不太了解的人来说,这听起来很戏剧化 - 如果不使用 dumb-init
,感觉就好像你做的事情完全错了。
这就是为什么我考虑在我自己的 Docker 镜像中使用它的原因……阻止我这样做的原因是我还没有找到使用它的官方 Docker 镜像。
mongod
。 postgres
。 node
。 如果
dumb-init
是 那么 很重要 - 为什么显然没有人使用它?我在这里缺少什么? 最佳答案
如果您有一个生成新进程的进程,并且您没有实现良好的信号处理程序来捕获子信号并在您的进程应该停止等情况下停止您的子进程,则可以使用诸如 dumb-init 或 tini 之类的东西。
如果您的进程没有产生新进程(例如 Node.js),那么这可能没有必要。
我猜 MongoDB、PostgreSQL ……可能运行子进程的有很好的信号处理程序。否则就会出现僵尸进程,并且有人提出了一个问题来解决这个问题。
唯一的问题可能是官方语言图像,如 node、ruby、golang。它们中没有哑初始化/tini,因为您通常不需要它们。但是这取决于开发人员可能会实现错误的子执行代码来修复信号处理程序或使用帮助程序作为 PID 1。
关于docker - 对于 Docker 来说,dumb-init 有多重要?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37374310/