如何在 Docker 上运行时重定向 FastAPI 文档

Mar*_*sta 2 python backend docker dockerfile fastapi

我需要将“ /swagger-ui.html ”重定向到文档页面。

我试过:

app = FastAPI()

@app.get("/swagger-ui.html")
async def docs_redirect():
    response = RedirectResponse(url='/docs')
    return response
Run Code Online (Sandbox Code Playgroud)

app = FastAPI(docs_url="/swagger-ui.html")

@app.get("/")
async def docs_redirect():
    response = RedirectResponse(url='/swagger-ui.html')
    return response
Run Code Online (Sandbox Code Playgroud)

但是,直接运行项目(使用 uvicorn 命令)我可以工作,但是当我将其放在 Docker 容器上时,它会在浏览器上输出此消息,询问位置,但没有任何内容可以作为输入:

无法推断基本 URL。当使用动态 Servlet 注册或 API 位于 API 网关后面时,这种情况很常见。基本 url 是提供所有 swagger 资源的根。例如,如果 api 在http://example.org/api/v2/api-docs上可用,则基本 URL 为http://example.org/api/。请手动输入位置:

这是我的 dockerfile:

FROM python:3.8
USER root
RUN mkdir -p /usr/local/backend
WORKDIR /usr/local/backend
EXPOSE 8080
ARG BUILD_ENV=dev 
ENV BUILD_ENV=$BUILD_ENV
COPY . /usr/local/backend
RUN pip install -r requirements.txt
ENTRYPOINT ["uvicorn", "app.main:app", "--port", "8080"]
Run Code Online (Sandbox Code Playgroud)

qew*_*jhb 9

试试这个代码,当我使用时它对我有用docker-compose

from fastapi.responses import RedirectResponse
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def docs_redirect():
    return RedirectResponse(url='/docs')
Run Code Online (Sandbox Code Playgroud)

  • `从 fastapi.responses 导入 RedirectResponse` (5认同)

小智 9

避免在文档页面中显示重定向

@app.get("/", include_in_schema=False)
async def docs_redirect():
    return RedirectResponse(url='/docs')
Run Code Online (Sandbox Code Playgroud)

此处的文档: https: //fastapi.tiangolo.com/advanced/path-operation-advanced-configuration/#exclude-from-openapi