我尝试将一个简单的 FastAPI 服务实例部署到 azure 中。
我尝试了多种方法,使用uvicorn作为服务器,使用gunicorn和uvicorn工作人员,使用Docker Hub中的图像,将图像上传到Azure中的容器注册表...
当我创建 Docker 映像并在本地运行它时,它工作得很好,但在 Azure 中却不起作用。
这是我的
main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"msg": "Hola FastAPI!!"}
@app.get("/url")
async def url():
return {"url": "http://whatever.es"}
这是我的
Dockerfile
# syntax=docker/dockerfile:1
FROM python:3.11
WORKDIR /code
COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["gunicorn" ,"--config", "gunicorn.py", "main:app"]
这是
gunicorn.py
配置文件:
# Gunicorn configuration file
import multiprocessing
bind = "0.0.0.0:8000"
worker_class = "uvicorn.workers.UvicornWorker"
workers = multiprocessing.cpu_count() * 2 + 1
这是我的
requirements.txt
fastapi
uvicorn
gunicorn
正如我告诉你的,所有过程似乎都正常,直到最后一步,部署后,我收到此消息,并且服务器没有在端口 8000 侦听。 在本地它运行得很好。
如您所见,它表示处于等待状态。
感谢您的帮助。
我尝试在 Azure 容器实例中执行我的容器映像。
我希望我的服务能够在 :8000 内运行
结果是那里没有任何东西运行
我使用您的代码创建了此项目,并成功将该映像部署到 Azure 容器注册表。
确保您的 ACI 分配有足够的 CPU、内存和其他资源。
检查 Azure 容器实例的日志,查看是否有任何错误消息或警告。
验证 ACI 配置中指定的容器映像是否可访问且配置正确。
独角兽。 py:
import multiprocessing
bind = "0.0.0.0:8000"
worker_class = "uvicorn.workers.UvicornWorker"
workers = (multiprocessing.cpu_count() * 2) + 1
我使用下面的命令在 Docker 中构建并运行 FastAPI。
docker build -t <ImageName> .
docker run -p 8000:8000 <ImageName>
我运行以下命令将 Docker 映像推送到 Azure 容器注册表。
az acr login --name <ContainerUserName> --userName <userName> --password <Password>
docker tag <ImageName> <AzureContainerRegistryName>.azurecr.io/<ImageName>:<tagName>
docker push <AzureContainerRegistryName>.azurecr.io/<ImageName>:<tagName>
我在Azure门户中创建了一个Azure容器实例,如下所示。
输出: