ホームページ >バックエンド開発 >Python チュートリアル >Flask アプリを Docker にデプロイした後にアクセスできないのはなぜですか?

Flask アプリを Docker にデプロイした後にアクセスできないのはなぜですか?

DDD
DDDオリジナル
2024-12-24 07:17:16211ブラウズ

Why Can't I Access My Flask App After Deploying it in Docker?

Docker での Flask アプリケーションのデプロイ: サーバー接続の問題の解決

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 コンテナにデプロイすると、サーバーは実行されているように見えますが、アプリケーションはコンテナの外部からアクセスできないままです。コンテナー。

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

Solution

問題は、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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。