我希望我的烧瓶服务器检测代码中的更改并自动重新加载。 我在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
请给我一些建议。提前谢谢。
答案 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)
假设您的文件结构如下:
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事件以更改“容器中”的代码。