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
アドバイスをお願いします。前もって感謝します。
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
次の設定で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構成ファイルで環境変数とエントリポイントを手動で指定する必要があります。
あなたのファイル構造が以下であると仮定します:
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"