docker run
的{{3}}导致tini
初始化系统被用作ENTRYPOINT
。结果,在容器中运行的应用程序将成为init系统的子进程,以便它可以处理信号处理,僵尸收割等。
docker-compose
还具有init: true
服务设置。
如--init
flag(tini
文档所说的那样)。
所以我的问题是:
--init
有什么缺点吗?--init
?--init
不是默认设置?答案 0 :(得分:0)
使用-init 标志没有任何弊端。但是,您的容器中要成为PID 1的过程并不能涵盖初始化过程的所有功能。 在大多数情况下,这应该不成问题,因为您只需要SIGNALS处理和子进程处理即可。
在哪种情况下最好避免使用--init?
例如,如果您将应用程序编码为处理信号,例如在NodeJS中:
handleValider() {
// on axios success
this.props.HandleNewDataFromPopup(data)
}
然后,您可以避免使用-init 或 tini (如果您希望上述代码段起作用,请确保在启动容器时使用exec表单)
在没有严重缺点的情况下:--init为什么不是默认设置?
因为如我的代码片段所示,让您的容器意识到SIGNAL并不是那么困难,并且除了PID 1可能会出现一些奇特的情况之外,tini并没有覆盖,因此没有充分的理由为所有容器中的默认注入tini。