web-dev-qa-db-fra.com

Serveur de flacon à rechargement automatique sur Docker

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.

7
BigJames

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
7
lepsch

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.

7
Radu Cosnita

En supposant que votre structure de fichier est la suivante:

 enter image description here

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"
1
ericgu