web-dev-qa-db-ja.com

自動リロードflask Docker上のサーバー

flaskサーバーでコードの変更を検出して自動的に再読み込みします。これをdockerコンテナで実行しています。何かを変更するたびに、コンテナをビルドして再起動する必要があります。どこが間違っているのか、これは初めてのフラスコ使用です。

これが私の木です

├── docker-compose.yml
└── web
    ├── Dockerfile
    ├── app.py
    ├── crawler.py
    └── requirements.txt

およびコード(app.py)

from flask import Flask 
import requests
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello Flask!!'

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

とdocker-compose

version: '2'
services:

  web:
    build: ./web
    ports:
     - "5000:5000"
    volumes:
     - ./web:/code

アドバイスをお願いします。前もって感謝します。

15
BigJames

Flaskは、デバッグモードでのコードのリロードをサポートしています。問題は、アプリケーションがコンテナ上で実行されており、これにより、開発中の実際のソースコードからアプリケーションが分離されることです。とにかく、次のようにdocker-compose.yaml上のボリュームを使用して、実行中のコンテナとホストの間でソースを共有できます。

こちらがdocker-compose.yamlです

version: "3"
services:
  web:
    build: ./web
    ports: ['5000:5000']
    volumes: ['./web:/app']

そしてここにDockerfile

FROM python:Alpine

EXPOSE 5000

WORKDIR app

COPY * /app/

RUN pip install -r requirements.txt

CMD python app.py
12
lepsch

次の設定でdocker-composeを使用してdockerでflask auto reloadを達成できました:

version: "3"
services:
  web:
    build: ./web
    entrypoint:
      - flask
      - run
      - --Host=0.0.0.0
    environment:
      FLASK_DEBUG: 1
      FLASK_APP: ./app.py
    ports: ['5000:5000']
    volumes: ['./web:/app']

自動リロードを実現するには、Docker構成ファイルで環境変数とエントリポイントを手動で指定する必要があります。

8
Radu Cosnita

あなたのファイル構造が以下であると仮定します:

enter image description here

Dockerfile:(WORKING DIRに注意)

FROM python:3.6.5-slim
RUN mkdir -p /home/project/bottle
WORKDIR /home/project/bottle 
COPY requirements.txt .
RUN pip install --upgrade pip --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]

Docker Compose:

version: '3'

services:
  web:
    container_name: web
    volumes:
      - './web:/home/project/bottle/'  <== Local Folder:WORKDIR
    build: ./web
    ports:
      - "8080:8080"
2
ericgu