我希望这个问题不会被标记为primarily opinion-based
,但会有一个客观的答案。
我已阅读Introducing dumb-init, an init system for Docker containers,其中详细说明了为何以及如何使用dumb-init
。老实说,对于那些对Linux流程结构不太有经验的人来说,这听起来非常引人注目 - 如果你不使用dumb-init
,感觉好像你做错了。
这就是我考虑在我自己的Docker镜像中使用它的原因......让我无法做到这一点的原因是我还没有找到使用它的官方Docker镜像。
如果dumb-init
如此重要 - 为什么显然没有人使用它?我在这里缺少什么?
答案 0 :(得分:17)
如果你有一个产生新进程的进程并且没有实现良好的信号处理程序来捕获子信号并且如果你的进程应该阻止你的孩子,那么可以使用dumb-init或tini之类的东西停止等等。
如果您的进程没有产生新进程(例如Node.js),则可能没有必要这样做。
我猜MongoDB,PostgreSQL,......可以运行子进程,实现了良好的信号处理程序。否则就会出现僵尸进程,有人提出了一个问题来解决这个问题。
唯一的问题可能是官方语言图片,如node,ruby,golang。它们没有dumb-init / tini,因为你通常不需要它们。但是开发人员可能会执行错误的子执行代码来修复信号处理程序或使用帮助程序作为PID 1。