web-dev-qa-db-ja.com

Dockerコンテナ内でPython Flask

Dockerコンテナ内でPython Flask Webサーバーを実行しようとしていますが、Flaskに接続できません=外部からのサーバー。

私がしたこと:

/temp/HelloFlask.pyを作成しました

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

コンテナポート5000をホストポート5000にマップし、〜/ tempを/ tempにマウントしてDockerコンテナを起動しました

docker run -it -p 5000:5000 -v ~/temp:/temp --name tf gcr.io/tensorflow/tensorflow:latest-devel

実行中のDockerコンテナー内に、Flaskをインストールし、HelloFlask.pyを実行しました

cd /temp
pip install Flask
python HelloFlask.py &

コンテナ内でサーバーにアクセスできることを確認しました

[root@de8b6996b540:/temp# curl localhost:5000
127.0.0.1 - - [22/Sep/2016 17:41:48] "GET / HTTP/1.1" 200 -
Hello World!

ローカルホストのコンテナポートを公開するDockerバージョン1.12.1(ビルド:12133)を使用しているので、Macのコンテナ外のlocalhost:5000にアクセスできるはずですが、接続できません。

docker for mac quickstart で説明されているように、nginxコンテナを実行してDockerがコンテナポートをローカルホストに正しくバインドしていることを確認するためにテストしました。ローカルホストを介してコンテナからポートにアクセスできます。

10
10GritSandpaper

app.run(Host='0.0.0.0')を試してください。

デフォルトでは、Flaskサーバーはローカルホストからのみアクセス可能です。この場合、コンテナーはローカルホストであり、リクエストはコンテナーの外部から発信されます。Host='0.0.0.0'パラメータは、外部IPからサーバーにアクセスできるようにします。 Flaskドキュメント で詳しく説明されています。

32
Erdi Aker