web-dev-qa-db-ja.com

GunicornとFlask on Docker / Docker-Composeを理解する

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マスターはcontainerのすべてのインターフェースのポート8000​​で実行されます

そして、127.0.0.1/localhostにあるcontainerのポート5000で実行するノードを生成します。

そこからcontainerのポート5000をHostport 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​​を介してアプリにアクセスできません

10
Kyle Calica-St

app.run()およびgunicornは、Webサーバーを実行する2つの方法です。 1つ目はFlask開発サーバーであり、開発には役立ちますが、本番環境にデプロイしないでください。両方を同時に実行しないでください。

gunicornappオブジェクトを指すようにして、オブジェクトをインポートし、それを使用してWebサーバー自体を実行できるようにする必要があります。それだけで十分です。

12
Alex Hall

の代わりに CMD [ "gunicorn", "-b", ":8000", "run" ]

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

Gunicornプロセスにrunを指示する代わりに、プロセスにlookの場所を指示することがわかります。 gunicornで提供するアプリケーションはappです。また、reload、ワーカー数、タイムアウト、ログレベルなどのオプションをgunicornコマンドに追加することもできます。

Alex Hallの答えをさらに詳しく説明するために、Flaskサーバーを運用環境で実行することは望ましくありません。スケーリング機能が非常に制限されているためです。Flask = docs、その言及:

Flaskの組み込みサーバーは拡張性が低く、デフォルトでは一度に1つのリクエストしか処理しないため、本番環境には適していません

13