在Docker上自动重装flask服务器

时间:2017-06-03 10:04:05

标签: python 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

请给我一些建议。提前谢谢。

4 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:7)

我设法使用docker-compose在docker中使用以下配置实现flask自动重新加载:

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 compose文件中手动指定环境变量和入口点才能实现自动重新加载。

答案 2 :(得分:1)

假设您的文件结构如下:

enter image description here

Dockerfile :(请注意工作目录)

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"

答案 3 :(得分:0)

这是我的示例:

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使Flask可以随着代码的更改而更改。

Docker已经插入您的fs事件以更改“容器中”的代码。