该--init标志的docker run原因tini初始化系统被用作ENTRYPOINT。结果,在容器中运行的应用程序将是init系统的子进程,因此它可以处理信号处理,僵尸收割等工作。
docker-compose也有一个init: true服务设置。
正如tini透明地工作一样,无需以任何方式修改Dockerfile(这就是tini文档所说的)。
所以我的问题是:
--init吗?--init?--init没有默认设置?使用--init标志没有任何缺点。但是,容器中 PID 为 1 的进程并不能涵盖 init 进程的所有功能。对于大多数情况,这应该不是问题,因为您只需要信号处理和子进程处理。
在什么情况下最好避免使用--init?
如果您对应用程序进行编码来处理信号,例如在 NodeJS 中:
const registerSignals = () => {
process.on('SIGTERM', () => {
console.log('SIGTERM received');
shutDown(0);
});
process.on('SIGINT', () => {
console.log('SIGTERM received');
shutDown(0);
});
}
Run Code Online (Sandbox Code Playgroud)
如果你没有僵尸进程可以收获或者你自己收获僵尸进程
那么你可以避免使用--init或tini (如果你希望上面的代码片段工作,请确保在启动容器时使用 exec 形式)
如果没有严重的缺点:为什么 --init 不是默认设置?
因为让你的容器像我的代码片段所示那样感知信号并不那么困难,而且你可能会遇到一些 tini 未涵盖的 PID 1 的特殊情况,因此没有充分的理由在所有容器中默认注入 tini。
编辑:添加卡梅伦的建议
| 归档时间: |
|
| 查看次数: |
304 次 |
| 最近记录: |