将 FastAPI Docker 映像部署到 Azure 容器实例时出错

问题描述 投票:0回答:1

我尝试将一个简单的 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 侦听。 在本地它运行得很好。

enter image description here

如您所见,它表示处于等待状态。

感谢您的帮助。

我尝试在 Azure 容器实例中执行我的容器映像。

我希望我的服务能够在 :8000 内运行

结果是那里没有任何东西运行

azure docker containers fastapi azure-container-instances
1个回答
0
投票

我使用您的代码创建了此项目,并成功将该映像部署到 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容器实例,如下所示。

enter image description here

enter image description here

输出

enter image description here

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.