2016-06-13 15 views
2

docker-composeを使ってデバッグモードで単純フラスコアプリを実行しようとしています。次のように私は私のDockerfileを作成しました:Dockerを使ってデバッグモードでフラスコアプリを実行できません

FROM jazzdd/alpine-flask 

EXPOSE 80 

マイドッキングウィンドウ-コンファイルは次のようになります。

version: '2' 

networks: 
    test_network: 
    driver: bridge 

services: 
    db: 
    networks: 
     - test_network 
    image: postgres:9.5.3 
    env_file: 
     - docker.env 
    expose: 
     - 5432 

    app: 
    networks: 
     - test_network 
    build: . 
    env_file: 
     - docker.env 
    expose: 
     - 80 
    ports: 
     - 80:80 
    volumes: 
     - ./app/:/app 
    command: -d 

マイdocker.envだけでPostgresデータベースへのパスワードを持っています。アプリを実行するために

from flask import Flask 
    app = Flask(__name__) 

    @app.route('/') 
    def hello_world(): 
    return "Hello, World" 

if __name__ == '__main__': 
    app.run(debug=True,host='0.0.0.0') 

を、私はdocker-compose up -d --buildコマンドを使用しています:私は次のように簡単なPythonのファイルを作成しました。私はappがサーバー上で起動した後、app.pyファイルを変更すると、コンテナを再起動しなくてもWebページに反映されると仮定します。私は期待された動作を見ていない。私はローカルのenv変数FLASK_DEBUG=1を設定しようとしましたが、それが役立つかどうかはわかりません。何か不足していますか?

また、私はthisページを参照しましたが、有用なものは見当たりませんでした。

+0

VirtualBoxを使用しているOSXまたはWindowsにいますか? – Matt

+0

あなたのフラスコのアプリは起動時に '* Reloader with Restarting with'をログしていますか? – Matt

答えて

2

サンプル(簡略化)は、参照のために以下で説明するコンテナの再起動を必要とせずにファイルのデモストレーションを実行します。

app.py

from flask import Flask 
app = Flask(__name__) 

@app.route('/') 
def hello_world(): 
    return "Hello, World" 

if __name__ == '__main__': 
    app.run(debug=True,host='0.0.0.0',port=80) 

あなたがの80

screenshot can be viewed here

概要の露出コンテナ港を一致させるために、フラスコの開発サーバーのポートを指定する必要がありますスクリーンショットの手順(MAC OS X):

  1. 空のディレクトリで始まるカールはlocalhost(これは、Hello Worldのが表示されます)
  2. 編集app.py
  3. カールはlocalhost(これは新しい編集内容を表示する必要があります)app.py
  4. ドッキングウィンドウの実行
  5. を作成します。
+0

これは問題でした。ポートを指定すると動作します。ありがとうございました。私はまた、デバッガモードをオンにするために、コマンド:-dをドッカーの作成に追加する必要がありました。 –

0

私の場合、私はgeventと競合しました。ここに回避策があります:

import os 
if not (os.environ.get('FLASK_DEBUG') == 1): 
    from gevent import monkey 
    monkey.patch_all() 
関連する問題