【问题标题】:Is supervisord needed for docker+gunicorn+nginx?docker+gunicorn+nginx需要supervisord吗?
【发布时间】:2016-12-07 21:49:53
【问题描述】:
我在 docker 中使用 gunicorn 运行 django,我的 docker 入口点是:
CMD ["gunicorn", "myapp.wsgi"]
假设已经有一个进程在系统启动时运行 docker 并在停止时重新启动 docker 容器,我什至需要使用 supervisord 吗?如果 gunicorn 会崩溃,它不会让 docker 崩溃然后重新启动吗?
【问题讨论】:
标签:
django
docker
gunicorn
supervisord
【解决方案1】:
简单的答案是否定的。是的,您可以在同一个容器中同时启动nginx 和gunicorn。您可以创建一个脚本来执行容器运行所需的所有内容,并在您的Dockerfile 末尾使用CMD 启动它。或者您可以像这样组合所有内容:
CMD (cd /usr/src/app && \
nginx && \
gunicorn wsgi:application --config ../configs/gunicorn.conf)
希望有帮助!
【解决方案2】:
您在 Docker 容器中需要像 supervisord(或其他进程管理器)这样的东西的唯一情况是,如果您需要在容器启动时在容器内启动多个独立进程。
例如,如果您需要在同一个容器中同时启动 两个 nginx 和 gunicorn,则需要调查某种进程管理器。但是,更常见的解决方案是将这两个服务放在两个单独的容器中。 docker-compose 之类的工具有助于管理多容器应用程序。
如果容器因主进程退出而退出,如果您在首次启动时配置了重启策略(例如,通过docker run --restart=always ...),Docker 将重启该容器。