在Docker上自动重新加载flask服务器

n9vozmp4  于 2022-12-03  发布在  Docker
关注(0)|答案(5)|浏览(120)

我想让我的flask服务器检测到代码的变化并自动重新加载。我在docker container上运行这个。每当我改变了一些东西,我就必须重新构建容器。我不知道哪里出了问题。这是我第一次使用flask。
这是我的树

├── 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')

和停靠合成

version: '2'
services:

  web:
    build: ./web
    ports:
     - "5000:5000"
    volumes:
     - ./web:/code

请给予我一些建议。先谢谢你了。

2nbm6dog

2nbm6dog1#

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
svdrlsy4

svdrlsy42#

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

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合成文件中手动指定环境变量和入口点,以便实现自动重新加载。

lsmd5eda

lsmd5eda3#

假设您的文件结构如下:

停靠文件:(注意工作方向)

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编写:

version: '3'

services:
  web:
    container_name: web
    volumes:
      - './web:/home/project/bottle/'  <== Local Folder:WORKDIR
    build: ./web
    ports:
      - "8080:8080"
z31licg0

z31licg04#

这是我的例子:
第一个
debug=True使Flask能够随着代码的更改而更改。
Docker已插入到fs事件中以更改容器”“中得代码“.”

fzwojiic

fzwojiic5#

如果合成运行不同的服务(例如app和rq),则需要在两者上设置宗卷,否则将无法工作。

相关问题