docker Azure应用服务找不到我在首次部署后添加的端点

3qpi33ja  于 9个月前  发布在  Docker
关注(0)|答案(1)|浏览(83)

我在一个Azure应用服务中部署了一个基于私有Docker Hub仓库中Docker镜像的应用。配置好示例后,我根据需要通过FTPS上传了/wwwroot文件夹中的应用文件。
在第一时刻,它的确定,我的API有1个端点和工作正常.在此之后,我改变了文件通过FTPS和添加一个端点在路由器,但我当我运行示例,新的端点找不到.
我看了一下示例中的文件,似乎没问题,这是我的路由文件:

from typing import Union

from fastapi import APIRouter
from fastapi import Depends
from fastapi import HTTPException

from ..extensions.database import get_resp_dict
from ..extensions.database import get_sla_dict
from ..extensions.schemas import TaskResponsibleResponse
from ..extensions.schemas import TaskResponsibleSetterSchema
from ..extensions.schemas import TaskSlaResponse
from ..extensions.schemas import TaskSlaSetterSchema
from ..extensions.security import authenticate_request

router = APIRouter(prefix="/flow/contractmanager", tags=["Flows"])

@router.post("/")
def get_task_responsible(
    request: TaskResponsibleSetterSchema,
    resp_dict: dict = Depends(get_resp_dict),
    token: dict = Depends(authenticate_request),
) -> Union[TaskResponsibleResponse, None]:
    """Get the task responsible by directory"""
    try:
        task_responsible = resp_dict[request.directory]
    except KeyError | Exception:
        raise HTTPException(400, detail="Directory not found")

    return TaskResponsibleResponse(directory=request.directory, responsible=task_responsible)

@router.post("/sla")
def set_task_sla(
    request: TaskSlaSetterSchema, sla_dict: dict = Depends(get_sla_dict), token: dict = Depends(authenticate_request)
) -> Union[TaskSlaResponse, None]:
    """Get the task SLA by category"""
    try:
        task_sla = sla_dict[request.category]
    except KeyError | Exception:
        raise HTTPException(400, detail="Directory not found")

    return TaskSlaResponse(category=request.category, sla=task_sla)

字符串
但是当我使用“/docs”端点来查找swagger时,它并没有出现在那里。
我试着在本地运行它,但它在我机器上的Docker容器中运行得很好。
我只是不知道发生了什么事。
只是想知道,我用的是F1免费示例,每天限制60分钟,不知道这能不能屏蔽这种东西
你们能帮帮我吗?
我的dockerfile:

FROM python:3.11-slim

WORKDIR /app

ENV POETRY_VIRTUALENVS_CREATE=false
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

RUN apt-get update && apt-get install -y libpq-dev gcc

RUN pip install poetry

COPY . .

RUN poetry install --without dev --no-interaction --no-ansi

EXPOSE 8000

RUN chmod +x /app/docker-entrypoint.sh

CMD ["./docker-entrypoint.sh"]


docker-entrypoint.sh:

#!/bin/sh

poetry run uvicorn senior.main:app --host 0.0.0.0 --port 8000


我的主文件:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

from .extensions.settings import config
from .routes.task import router as task_router

def create_app(title: str, description: str, routes: list) -> FastAPI:
    """App factory"""
    app = FastAPI(title=title, description=description)

    for route in routes:
        app.include_router(route)

    app.add_middleware(CORSMiddleware, allow_origins=config.origins, allow_methods=config.methods)

    return app

app = create_app(config.title, config.description, [task_router])


我的应用服务示例设置:x1c 0d1x
我的问题不在于部署,而在于部署了什么。
尽管我添加了代码,但在Azure应用程序中找不到它



但在本地运行时:

sulc1iza

sulc1iza1#

这里是我的简单FastAPI应用程序,您可以将其用作起点。除了Swagger文档的默认/docs端点之外,还有其他端点。

# main.py

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"message": "Hello, World!"}

@app.get("/items/{item_id}")
def read_item(item_id: int, query_param: str = None):
    return {"item_id": item_id, "query_param": query_param}

if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app, host="0.0.0.0", port=8000)

字符串

requirements.txt:

fastapi==0.68.0
uvicorn==0.15.0


下面是我在应用程序中使用的Dockerfile。

# Use an official Python runtime as a parent image
FROM python:3.11-slim

# Set the working directory to /app
WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y libpq-dev gcc

# Copy the local directory contents into the container at /app
COPY . .

# Install project dependencies
RUN pip install --no-cache-dir -r requirements.txt

# Expose port 8000
EXPOSE 8000

# Specify the command to run on container start
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

  • 镜像拉取失败的一个常见原因是容器注册表凭据不正确或已过期请检查此SO Link。您可以尝试更新应用服务配置中的凭据并重新启动应用。


的数据
在这里,我将可用性位置设置为EastUS,对于示例应用程序,我设置为公共访问。
然后我将ACR配置到我的应用服务Web应用程序,如下所示。



您应该在ACR和webapp中使用相同的区域。


  • 另一个可能的原因是,应用程序服务标识没有正确的角色分配来访问container registry。可以使用Azure CLI命令为应用程序服务启用系统分配或用户分配的托管标识,并为其授予AcrPull角色

相关问题