了解Docker / Docker-Compose上的Gunicorn和Flask
我无法让Flask和Gunicorn在使用Docker-compose的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" ]
docker工人,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
是运行networking服务器的两种方式。 第一个是Flask开发服务器,它对于开发很有用,但不应该在生产环境中部署。 你不应该同时运行两个。
gunicorn
应该指向app
对象,以便它可以导入并使用它来运行Web服务器本身。 这就是它所需要的。
而不是CMD [ "gunicorn", "-b", ":8000", "run" ]
做CMD ["gunicorn", "app:app" "-b", "0.0.0.0:8000"]
你可以看到,而不是告诉gunicorn进程run
你,而是告诉过程在哪里看 。 您要gunicorn服务的app
是app
。 你也可以在gunicorn命令中join更多的选项,比如reload
,工人数量,超时,日志级别等。
为了扩大Alex Hall的答案,您不想在生产环境中运行Flask服务器,因为缩放function非常有限。 根据Flask文档,提到:
Flask的内置服务器不适合生产,因为它不能很好地扩展,默认情况下一次只能提供一个请求
- docker + gunicorn + nginx需要supervisord吗?
- Docker nginx无法连接到在单独容器中运行的上游gunicorn
- Flask,Gunicorn,NGINX,Docker:configurationSERVER_NAME和proxy_pass的方法是什么?
- 在Ubuntu 16.04中设置PYTHONPATH,让Docker映像正常运行
- 无法访问在Docker容器内运行的Flask Web应用程序
- 为什么Docker容器的图片变得如此庞大,同时在UBUNTU 16.04上倚靠python3.6,Virtualenv,Flask,Gunicorn
- 即使它在同一个目录下,Docker构build好像看不到requirements.txt
- Docker和Nginx的proxy_pass之间的容器
- nginx错误403 – 目录索引被禁止