需要在docker+gunicorn+nginx中使用supervisord吗?

10

我正在使用docker内的gunicorn运行django,我的docker入口点是:

CMD ["gunicorn", "myapp.wsgi"]

假设已经有一个进程在系统启动时运行docker并在其停止时重新启动docker容器,那么我是否需要使用supervisord?如果gunicorn崩溃了,它不会崩溃docker,然后重新启动吗?

2个回答

17
唯一需要在Docker容器中使用像supervisord(或其他进程管理器)这样的工具的情况是当您需要在容器启动时启动多个独立的进程时。例如,如果您需要在同一个容器中同时启动nginx和gunicorn,则需要使用某种进程管理器。但是,更常见的解决方案是将这两个服务放置在两个单独的容器中。像docker-compose这样的工具有助于管理多容器应用程序。如果容器退出,因为主进程退出,Docker会重新启动该容器,如果您在首次启动容器时配置了重启策略(例如,通过docker run --restart=always ...)。

0
简单的答案是否定的。是的,你可以在同一个容器中同时启动 nginxgunicorn。你可以创建一个脚本,在 Dockerfile 的末尾用 CMD 启动它,使容器执行所有必要的内容。或者你可以将它们组合起来,像这样:
CMD (cd /usr/src/app && \
     nginx && \
     gunicorn wsgi:application --config ../configs/gunicorn.conf)

希望这能有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接