主管和Docker:如果服务没有启动,如何退出Supervisor?

Bri*_*son 4 supervisord docker

我目前在Docker镜像中使用Supervisor来启动和管理我的服务,如果这些服务中至少有一个进入FATAL状态,我想配置Supervisor退出.

这样做,除了Supervisor之外什么都没有成功启动时,我想避免让Docker容器处于运行状态.

谢谢!

Tho*_*zco 8

正如mhsmith所提到的,事件监听器是实现这一目标的最佳方式.您可以使用以下侦听器(ADD例如/usr/local/bin/exit-event-listener):

#!/usr/bin/env python
import os
import signal

from supervisor import childutils

def main():
    while True:
        headers, payload = childutils.listener.wait()
        childutils.listener.ok()
        if headers['eventname'] != 'PROCESS_STATE_FATAL':
            continue
        os.kill(os.getppid(), signal.SIGTERM)

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

然后,向主管注册:

[eventlistener:exit_on_any_fatal]
command=exit-event-listener
events=PROCESS_STATE_FATAL
Run Code Online (Sandbox Code Playgroud)


mhs*_*ith 2

您可以使用 Supervisor事件侦听器来完成此操作。将其订阅到事件PROCESS_STATE_FATAL,并通过向supervisord发送SIGTERM来响应该事件,您可能在容器中以PID 1的身份运行它。