【问题标题】:FastAPI Uvicorn works locally and Docker-compose but not with Docker RunFastAPI Uvicorn 在本地和 Docker-compose 中工作,但不适用于 Docker Run
【发布时间】:2022-11-04 00:53:51
【问题描述】:

我制作了一个 FastAPI API 服务,每个“端点排序”都有路由,可以使用“uvicorn main:app --reload”通过终端在本地运行它。使用 Docker-compose 运行它也可以正常工作。 (文件结构见截图)

每当我尝试构建映像并执行“docker run myimage”时,它都会启动并显示地址:http://0.0.0.0:8000。然而,由于某种原因,向它发送请求似乎不起作用。为什么“Docker-compose”有效而“Docker Run”无效?

我需要一个可以在 Google Cloud 上运行的 docker 映像。我对 Docker 比较陌生,所以这对我来说似乎完全是魔法。很想了解我在这里做错了什么。

我的 Dockerfile:

FROM python:3.8.10
COPY ./app /app
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
RUN apt-get update
RUN apt-get --yes install libsndfile1-dev

EXPOSE 8000
CMD uvicorn app.main:app --host 0.0.0.0 --port 8000

我的 Docker 撰写文件:

version: '3.3'
services:
  app:
    build: .
    command: uvicorn app.main:app --host 0.0.0.0 --port 8000
    ports:
      - "8000:8000"

我的 main.py:

from fastapi import FastAPI
import uvicorn
import os
from app.routes.api import router as api_router

app = FastAPI()
app.include_router(api_router)

@app.get('/')
def index():
   return {'message': 'Everything online'}

【问题讨论】:

标签: docker docker-compose fastapi uvicorn


【解决方案1】:

我看到您已将端口映射 8000:8000 包含在您的 docker-compose.yml 文件中。使用docker run 运行容器时是否还包括端口映射?例如,您需要 docker run -p 8000:8000 <your_image_name> ... 之类的东西,以便将容器的端口 8000 映射到主机的端口 8000。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-26
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 2020-12-07
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多