# fastapi-docker **Repository Path**: flynngo/fastapi-docker ## Basic Information - **Project Name**: fastapi-docker - **Description**: fastapi-docker运行的例子 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-05-19 - **Last Updated**: 2024-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 当然,这里是一个使用 FastAPI 和 Docker 的完整例子,展示如何配置开发环境以支持代码热重载。我们将创建一个简单的 FastAPI 应用,并配置 Docker 和 docker-compose 文件,使其能够在代码更改时自动重新加载。 目录结构 首先,设置以下目录结构: css Copy code fastapi-app/ │ ├── app/ │ ├── __init__.py │ ├── main.py │ ├── Dockerfile ├── docker-compose.yml └── requirements.txt app/main.py 在 app 目录下创建 main.py 文件,这是我们的 FastAPI 应用的入口点: python Copy code from fastapi import FastAPI app = FastAPI() @app.get("/") async def read_root(): return {"message": "Hello, World!"} @app.get("/items/{item_id}") async def read_item(item_id: int): return {"item_id": item_id, "message": "This is an item"} requirements.txt 创建一个 requirements.txt 文件,列出我们的依赖项: Copy code fastapi uvicorn Dockerfile 在项目根目录下创建一个 Dockerfile,用于构建我们的 Docker 镜像: dockerfile Copy code FROM python:3.10-slim # 设置工作目录 WORKDIR /app # 复制依赖文件并安装 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制应用程序代码 COPY ./app /app/app # 启动 FastAPI 应用,并启用热重载 CMD ["uvicorn", "app.main:app", "--reload", "--host", "0.0.0.0", "--port", "8000"] docker-compose.yml 创建一个 docker-compose.yml 文件,定义我们的服务和卷挂载: yaml Copy code version: '3.8' services: web: build: . volumes: - ./app:/app/app ports: - "8000:8000" command: uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 运行项目 构建 Docker 镜像: 在项目根目录下运行以下命令构建 Docker 镜像: bash Copy code docker-compose build 启动容器: 使用 docker-compose 启动容器: bash Copy code docker-compose up 这将启动 FastAPI 应用,并启用热重载功能。你应该会看到类似以下的输出: arduino Copy code web_1 | INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) web_1 | INFO: Started reloader process [1] using statreload web_1 | INFO: Started server process [7] web_1 | INFO: Waiting for application startup. web_1 | INFO: Application startup complete. 访问应用程序: 打开浏览器并访问 http://localhost:8000,你应该会看到返回的 JSON 响应: json Copy code { "message": "Hello, World!" } 测试热重载: 现在,你可以尝试编辑 app/main.py 文件,例如更改根路径的返回消息: python Copy code @app.get("/") async def read_root(): return {"message": "Hello, FastAPI with Docker!"} 保存文件后,查看容器的日志,你会发现应用程序自动重新加载,并且浏览器中的输出将会更新: json Copy code { "message": "Hello, FastAPI with Docker!" } 通过这种方式,你可以在容器内进行开发,并且每次修改代码后,FastAPI 应用会自动重载,无需手动重启容器。