什么时候不使用docker run --init

时间:2019-06-07 14:42:59

标签: docker

docker run的{​​{3}}导致tini初始化系统被用作ENTRYPOINT。结果,在容器中运行的应用程序将成为init系统的子进程,以便它可以处理信号处理,僵尸收割等。

docker-compose还具有init: true服务设置。

--init flagtini文档所说的那样)。

所以我的问题是:

  • 使用--init有什么缺点吗?
  • 在哪种情况下最好避免使用--init
  • 万一没有严重的弊端:为什么--init不是默认设置?

1 个答案:

答案 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。