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をHost
port 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
は、Webサーバーを実行する2つの方法です。 1つ目はFlask開発サーバーであり、開発には役立ちますが、本番環境にデプロイしないでください。両方を同時に実行しないでください。
gunicorn
はapp
オブジェクトを指すようにして、オブジェクトをインポートし、それを使用してWebサーバー自体を実行できるようにする必要があります。それだけで十分です。
の代わりに 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つのリクエストしか処理しないため、本番環境には適していません