为了账号安全,请及时绑定邮箱和手机立即绑定

请教在码头工人中使用主管

请教在码头工人中使用主管

梦里花落0921 2019-09-03 09:00:10
在码头工人中使用主管我不是在询问使用码头工人的主管,而只是想让我的理解得到验证。我知道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以转发信号并收集进程




查看完整回答
反对 回复 2019-09-10
  • 2 回答
  • 0 关注
  • 533 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信