docker+gunicorn+nginx 需要 supervisord 吗?

Is supervisord needed for docker+gunicorn+nginx?

我 运行ning django with gunicorn inside docker,我 docker 的入口点是:

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

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

你唯一需要在 Docker 容器中使用诸如 supervisord(或其他进程主管)之类的东西的情况是,如果你需要在容器启动时在容器内启动多个独立进程。

例如,如果您需要在同一容器中启动 nginx 和 gunicorn,则需要调查某种进程主管。但是,更常见的解决方案是将这两个服务放在两个单独的容器中。 docker-compose 之类的工具有助于管理多容器应用程序。

如果容器因为主进程退出而退出,如果您在首次启动时配置了重启策略(例如,通过 docker run --restart=always ...),Docker 将重启该容器。

简单的答案是否定的。是的,您可以在同一个容器中同时启动 nginxgunicorn。您可以创建一个脚本来执行您的容器 运行 所需的一切,并在 Dockerfile 末尾以 CMD 启动它。或者您可以像这样组合所有内容:

CMD (cd /usr/src/app && \
     nginx && \
     gunicorn wsgi:application --config ../configs/gunicorn.conf)

希望对您有所帮助!