繁体   English   中英

在Docker / Docker-Compose上理解Gunicorn和Flask

[英]Understanding Gunicorn and Flask on Docker/Docker-Compose

我在使用Docker-compose让Flask和Gunicorn在Docker上正常工作时遇到了麻烦

Dockerfile:

FROM ubuntu:latest
MAINTAINER Kyle Calica "Kyle Calica"
RUN apt-get update -y
RUN apt-get install -y python3-dev  build-essential python-pip gunicorn
RUN pip install --upgrade setuptools
RUN pip install ez_setup
COPY . /app
WORKDIR /app
RUN pip install -r ./app/requirements.txt
CMD [ "gunicorn", "-b", ":8000", "run" ]

码头工人,Compose.yml:

version: '2'
services:
 web:
  build: .
  volumes:
  - ./:/var/www/crypto
  ports:
   - "5000:5000"

run.py:

from app import app
app.run()

根据我的理解,Gunicorn master将在容器中的所有接口上的端口8000上运行

然后它将生成一个节点,在127.0.0.1/localhost的容器中的端口5000上运行。

从那里我将container端口5000链接到我的host端口8000

我希望从我的主机http://127.0.0.1:8000看到我的应用程序,而不是什么都没发生,似乎没有任何连接。

我以前做过这个,但不记得我做了什么不同。

(env) paper-street:CoinSlack kyle$ gunicorn -b :8000 run [2017-09-16 17:43:59 -0700] [15402] [INFO] Starting gunicorn 19.7.1 [2017-09-16 17:43:59 -0700] [15402] [INFO] Listening at: http://0.0.0.0:8000 (15402) [2017-09-16 17:43:59 -0700] [15402] [INFO] Using worker: sync [2017-09-16 17:43:59 -0700] [15405] [INFO] Booting worker with pid: 15405 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

^原因是因为它似乎产生了一个工人并在端口5000运行它,我无法通过端口8000访问我的应用程序

app.run()gunicorn是运行网络服务器的两种方式。 第一个是Flask开发服务器,它对开发很有用,但不应该在生产中部署。 你不应该同时运行这两个。

gunicorn应该指向app对象,以便它可以导入它并使用它来运行web服务器本身。 这就是它所需要的一切。

而不是CMD [ "gunicorn", "-b", ":8000", "run" ]

CMD ["gunicorn", "app:app", "-b", "0.0.0.0:8000"]

你可以看到,而不是告诉gunicorn进程run你,而不是告诉进程在哪里 你想要gunicorn服务的appapp 您还可以为gunicorn命令添加更多选项,例如reload ,工作者数量,超时,日志级别等...

为了扩展Alex Hall的答案,您不希望在生产中运行Flask服务器,因为扩展能力非常有限。 根据Flask文档,提到:

Flask的内置服务器不适合生产,因为它不能很好地扩展,默认情况下一次只能提供一个请求

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM