docker-compose - Docker-compose FastAPI --reload
问题描述
我在 docker docker 容器中运行 FastAPI 应用程序。它运作良好,除了一件事
如果有任何更改,该应用程序不会重新加载。仅当我重新启动容器时才应用更改。--reload
但我想知道为什么如果我输入命令标志它不会重新加载应用程序?
我知道如果代码发生一些更改,docker 本身不会重新加载。但是 app 必须是 if flag --reload
in command 。
如果我误解了,请告知如何实现我想要的。谢谢
主文件
from typing import Optional
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
if __name__ == '__main__':
uvicorn.run(app, host="0.0.0.0", port=8000, reload=True)
码头工人-compose.yml
version: "3"
services:
web:
build: .
restart: always
command: bash -c "uvicorn main:app --host 0.0.0.0 --port 8000 --reload"
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
db:
image: postgres
ports:
- "50009:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=test_db
解决方案
你是用 启动容器docker compose up
吗?这对我有用,在http://127.0.0.1
.
version: "3.9"
services:
bff:
container_name: bff
build: .
working_dir: /code/app
command: uvicorn main:app --host 0.0.0.0 --port 8000 --reload
environment:
DEBUG: 1
volumes:
- .:/code
ports:
- "80:8000"
restart: on-failure
另外,我的应用程序中没有您的最后两行if __name__ ==
等。不确定这是否会改变任何事情。
推荐阅读
- mqtt - 无法将数据发布到我的本地 mqtt 服务器
- racket - 为什么球拍解释器中的“骗局”与 drracket 中的不同?
- javascript - 如何导入可能有语法错误的模块?
- c# - 给定元素时检索 XML“id”属性值
- java - Java - Excel 导入日期和数字
- python - Paramiko TypeError: from_buffer() 无法返回 str 或 unicode 或 bytearray 对象中的原始字符串的地址
- laravel - 完成选择框 Vuetify 行为到文本字段中
- json - Laravel AJAX JSON eturn 数据相关
- amazon-emr - 如何使用 cloudwatch 监控 EMR 集群是否终止
- android - 在 GLsurface 视图的情况下,bringToFront 不起作用