Auto reloading flask server on Docker

前端 未结 4 2214
南笙
南笙 2020-12-16 11:44

I want my flask server to detect changes in code and reload automatically. I\'m running this on docker container. Whenever I change something, I have to build and up again t

相关标签:
4条回答
  • 2020-12-16 11:49

    I managed to achieve flask auto reload in docker using docker-compose with the following config:

    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']
    

    You have to manually specify environment variables and entrypoint in the docker compose file in order to achieve auto reload.

    0 讨论(0)
  • 2020-12-16 12:10

    This is my example:

    version: "3.8"
    
    services:
      local-development:
        build:
          context: .
          dockerfile: Dockerfiles/development.Dockerfile
        ports:
          - "5000:5000"
        volumes:
          - .:/code
    
    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def hello_world():
        return "hello world"
    
    
    if __name__ in "__main__":
        app.run(host="0.0.0.0", port=5000, debug=True)
    

    debug=True enables Flask to change as your code changes.

    Docker already plugs into your fs events to change the code "in the container".

    0 讨论(0)
  • 2020-12-16 12:16

    Flask supports code reload when in debug mode as you've already done. The problem is that the application is running on a container and this isolates it from the real source code you are developing. Anyway, you can share the source between the running container and the host with volumes on your docker-compose.yaml like this:

    Here is the docker-compose.yaml

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

    And here the Dockerfile:

    FROM python:alpine
    
    EXPOSE 5000
    
    WORKDIR app
    
    COPY * /app/
    
    RUN pip install -r requirements.txt
    
    CMD python app.py
    
    0 讨论(0)
  • 2020-12-16 12:16

    Assuming your file structure is the below:

    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"
    
    0 讨论(0)
提交回复
热议问题