我目前正在Docker镜像中使用Supervisor来启动和管理我的服务,如果这些服务中至少有一个进入FATAL状态,我想配置Supervisor退出。
这样做,除了Supervisor之外什么都没有成功启动时,我想避免让Docker容器处于运行状态。
谢谢!
答案 0 :(得分: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()
然后,向主管注册:
[eventlistener:exit_on_any_fatal]
command=exit-event-listener
events=PROCESS_STATE_FATAL
答案 1 :(得分:2)
您可以使用主管event listener执行此操作。将其订阅到事件PROCESS_STATE_FATAL
,并通过向管理程序发送SIGTERM来响应事件,您可能在容器中作为PID 1运行。