【发布时间】:2021-02-24 19:30:19
【问题描述】:
我有一个运行 Supervisor 的 Docker 容器,有 2 个进程:
- 芹菜
- 姜戈
当这些进程之一返回错误时,我希望 Supervisor 退出。
这是我的配置:
[supervisord]
nodaemon=true
loglevel=debug
logfile=/app/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/app
[program:django]
command=python manage.py runserver 0.0.0.0:8000
redirect_stderr=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
[program:celery]
command=celery -A myapp worker --beat --scheduler django --loglevel=debug
redirect_stderr=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
[eventlistener:processes]
command=bash -c "printf 'SUPERVISORD READY' && while read line; do kill -SIGQUIT $PPID; done < /dev/stdin"
events=PROCESS_STATE_STOPPED,PROCESS_STATE_EXITED,PROCESS_STATE_FATAL
当我遇到一个通常应该让 Docker 退出的致命错误时,Supervisor 会一次又一次地尝试启动 Django.. 而目标是退出。
这里缺少什么? 我尝试了不同的其他配置,但它不起作用。
【问题讨论】:
-
另外,您不想在生产中运行 runserver docs.djangoproject.com/en/3.1/ref/django-admin/#runserver,而是进行适当的部署 docs.djangoproject.com/en/3.1/howto/deployment
-
是的。我只是还在开发中尝试。
-
这些需要在单个容器中运行吗?您可以在单独的容器中运行它们,无需 supervisord,使用替代命令但基于相同的图像,然后使用 Docker 的普通进程监督。
标签: python django docker supervisord