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がコンテナポートをローカルホストに正しくバインドしていることを確認するためにテストしました。ローカルホストを介してコンテナからポートにアクセスできます。
app.run(Host='0.0.0.0')
を試してください。
デフォルトでは、Flaskサーバーはローカルホストからのみアクセス可能です。この場合、コンテナーはローカルホストであり、リクエストはコンテナーの外部から発信されます。Host='0.0.0.0'
パラメータは、外部IPからサーバーにアクセスできるようにします。 Flaskドキュメント で詳しく説明されています。