主pipe和docker工人:如果服务不启动,如何退出主pipe?

我目前正在使用我的Docker镜像中的Supervisor来启动和pipe理我的服务,我想configurationSupervisor退出,如果这些服务中至less有一个进入了FATAL状态。

这样做,当Supervisor成功启动时,我想避免让Docker容器处于运行状态。

谢谢!

您可以使用Supervisor 事件侦听器来执行此操作。 订阅它到事件PROCESS_STATE_FATAL ,并通过发送一个SIGTERM到supervisord来响应这个事件,你很可能在容器中作为PID 1运行。

正如mhsmith提到的,一个事件监听器是实现这个目标的最好方法。 你可以使用下面的监听器(比如/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() 

然后,向主pipe注册:

 [eventlistener:exit_on_any_fatal] command=exit-event-listener events=PROCESS_STATE_FATAL