在码头工人中使用主管我不是在询问使用码头工人的主管,而只是想让我的理解得到验证。我知道docker在运行时会运行一个进程。此外,当我们需要在容器内运行多个进程时,使用supervisor。我已经看到几个例子,其中一个容器从基本映像启动并安装了几个服务,并且容器被提交以形成一个新映像,所有这些都没有supervisor。所以,我的基本疑问是两种方法之间的区别。我的理解是当docker容器停止时它会向PID进程发送一个kill信号,PID 1管理子进程并停止所有的子进程,这正是supervisor所做的那样,而我们可以安装多个进程而不需要supervisor可以在docker run发出进程时运行,当容器停止时,只有PID 1将被发送信号,其他运行进程将不会正常停止。请确认我对使用的理解supervisord是否正确。
2 回答
智慧大石
TA贡献1946条经验 获得超3个赞
更新码头1.12(2016年第4季度/ 2017年第1季度)
Arnaud Porterie刚刚穿过:
[]刚刚合并:有了
docker run --init
,Rick Grimes会照顾你所有的僵尸。
(提交eabae09)
参见PR 26061:“ 为僵尸战斗和信号处理添加初始化过程 ”(和PR 26736)
这增加了一个小的C二进制文件来对抗僵尸。它安装在/ dev / init下,并预先添加到用户指定的args中。您可以通过守护程序标志dockerd --init启用它,因为默认情况下禁用向后compat。
您还可以覆盖守护程序选项,或者在每个容器的基础上指定它
docker run --init=true|false
。您可以通过运行像这样的进程作为容器中的pid 1来测试这一点,并查看容器在运行时出现的额外僵尸。
int main(int argc, char ** argv) { pid_t pid = fork(); if (pid == 0) { pid = fork(); if (pid == 0) { exit(0); } sleep(3); exit(0); } printf("got pid %d and exited\n", pid); sleep(20);}
该码头工人守护现在有选项
--init
在容器内运行init以转发信号并收集进程
- 2 回答
- 0 关注
- 591 浏览
添加回答
举报
0/150
提交
取消