Je souhaite que mon serveur flask détecte les modifications de code et se recharge automatiquement. J'exécute cette opération sur un conteneur Docker. Chaque fois que je modifie quelque chose, je dois le remonter. Je ne sais pas où est le problème. C'est la première fois que j'utilise un ballon.
Voici mon arbre
├── docker-compose.yml
└── web
├── Dockerfile
├── app.py
├── crawler.py
└── requirements.txt
et code (app.py)
from flask import Flask
import requests
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello Flask!!'
if __== '__main__':
app.run(debug = True, Host = '0.0.0.0')
et docker-compose
version: '2'
services:
web:
build: ./web
ports:
- "5000:5000"
volumes:
- ./web:/code
S'il vous plaît donnez-moi un conseil. Merci d'avance.
Flask prend en charge le rechargement de code en mode débogage, comme vous l'avez déjà fait. Le problème est que l'application s'exécute sur un conteneur et que cela l'isole du code source réel que vous développez. Quoi qu'il en soit, vous pouvez partager la source entre le conteneur en cours d'exécution et l'hôte avec des volumes sur votre docker-compose.yaml
comme ceci:
Voici le docker-compose.yaml
version: "3"
services:
web:
build: ./web
ports: ['5000:5000']
volumes: ['./web:/app']
Et voici la Dockerfile
:
FROM python:Alpine
EXPOSE 5000
WORKDIR app
COPY * /app/
RUN pip install -r requirements.txt
CMD python app.py
J'ai réussi à réaliser le rechargement automatique du flacon dans le menu fixe en utilisant docker-compose avec la configuration suivante:
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']
Vous devez spécifier manuellement les variables d'environnement et le point d'entrée dans le fichier de composition du menu fixe afin d'effectuer le rechargement automatique.
En supposant que votre structure de fichier est la suivante:
Dockerfile: (note 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"