首页 > 解决方案 > Docker-compose FastAPI --reload

问题描述

我在 docker docker 容器中运行 FastAPI 应用程序。它运作良好,除了一件事

如果有任何更改,该应用程序不会重新加载。仅当我重新启动容器时才应用更改。--reload但我想知道为什么如果我输入命令标志它不会重新加载应用程序?

我知道如果代码发生一些更改,docker 本身不会重新加载。但是 app 必须是 if flag --reloadin 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-composefastapi

解决方案


你是用 启动容器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__ ==等。不确定这是否会改变任何事情。


推荐阅读