ホームページ >バックエンド開発 >Python チュートリアル >Flask アプリを Docker にデプロイした後にアクセスできないのはなぜですか?
Docker で Flask アプリケーションをデプロイする場合、コンテナが実行されているように見えても、サーバー接続の問題が発生する可能性があります。この記事では、一般的な問題を調査し、コンテナーの外部からアプリケーションにアクセスできるようにするための解決策を提供します。
Flask 上で実行される「perfektimprezy」という名前のアプリについて考えてみましょう。次のソース:
from flask import Flask app = Flask(__name__) app.debug = True @app.route('/') def main(): return 'hi' if __name__ == '__main__': app.run()
Docker コンテナにデプロイすると、サーバーは実行されているように見えますが、アプリケーションはコンテナの外部からアクセスできないままです。コンテナー。
デプロイメントに使用される Dockerfile は次のとおりです。
# Dockerfile FROM dreen/flask MAINTAINER dreen WORKDIR /srv # Get source RUN mkdir -p /srv COPY perfektimprezy.tar.gz /srv/perfektimprezy.tar.gz RUN tar x -f perfektimprezy.tar.gz RUN rm perfektimprezy.tar.gz # Run server EXPOSE 5000 CMD ["python", "index.py"]
デプロイメント手順には、イメージの構築と、ポート 5000 を公開したコンテナーの実行が含まれます。
>$ sudo docker build -t perfektimprezy . >$ sudo docker run -i -p 5000:5000 -d perfektimprezy
コンテナは実行されているようです予想通り、Flask サーバーはコンテナ内のポート 5000 でリッスンします:
>$ sudo docker logs 1c50b67d45b1 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) * Restarting with stat
ただし、コンテナの外部からアプリケーションへのリクエストは空の応答になります:
>$ curl 127.0.0.1:5000 -v * Empty reply from server
問題は、Flask アプリのローカルホスト インターフェイスへのバインディングにあります。コンテナの外部からアプリケーションにアクセスできるようにするには、代わりに 0.0.0.0 アドレスにバインドする必要があります。
Flask アプリの初期化で、
if __name__ == '__main__': app.run()
を
if __name__ == '__main__': app.run(host='0.0.0.0')この変更により、アプリがホスト上のすべてのインターフェイスにバインドされ、コンテナーの外部からアクセスできるようになります。
以上がFlask アプリを Docker にデプロイした後にアクセスできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。