我正在使用码头工具内的gunicorn运行django,我的码头工作点是:
CMD [“gunicorn”,“myapp.wsgi”]
假设已经有一个进程在系统启动时运行docker并在停止时重新启动docker容器,我是否还需要使用supervisord?如果gunicorn会崩溃,它会不会撞击码头,然后重新启动?
答案 0 :(得分:10)
在Docker容器中唯一需要像supervisord(或其他进程管理程序)这样的东西,如果你需要在容器启动时启动容器内的多个独立进程。
例如,如果您需要在同一个容器中启动 nginx和gunicorn,则需要调查某种流程主管。但是,更常见的解决方案是将这两个服务放在两个单独的容器中。像docker-compose这样的工具可以帮助管理多容器应用程序。
如果由于主进程退出而导致容器退出,则如果您在首次启动时配置了重新启动策略(例如,通过docker run --restart=always ...
),则Docker将重新启动该容器。
答案 1 :(得分:0)
简单的答案是否定的。是的,您可以在同一容器中同时启动nginx
和gunicorn
。您可以创建一个脚本来执行容器运行所需的一切,然后在CMD
的末尾以Dockerfile
开头。或者,您可以像这样组合所有内容:
CMD (cd /usr/src/app && \
nginx && \
gunicorn wsgi:application --config ../configs/gunicorn.conf)
希望有帮助!