這是我嘗試對 fastapi 腳本進行 dockerizing 后的日志:
$ docker-compose logs -f
Attaching to docker-name
docker-name exited with code 0
這是我的碼頭工人撰寫檔案:
version: '3'
services:
observatory-service:
build: ./observatory
volumes:
- ./observatory:/usr/src/app
ports:
- 8000:8000
碼頭檔案:
FROM python:3.9
COPY requirements.txt /usr/src/app/
RUN pip install -r /usr/src/app/requirements.txt
COPY . /usr/src/app
CMD ["python", "/usr/src/app/api.py"]
api.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return { "Lux app": "Welcome to Lux app" }
@app.post("/extract_text")
def ali():
return {"Hello": "World"}
我確信它會通過 api.py 但它會毫無錯誤地退出它。我在 Windows docker 上運行它。
uj5u.com熱心網友回復:
問題是您直接使用 python 呼叫 fastAPI 服務器腳本,而不是使用諸如 Uvicorn 之類的 ASGI Web 服務器包裝。這在fastAPI 的除錯頁面中有解釋。
我用最新版本的 fastapi/uvicorn 進行了測驗,效果很好。我建議您進行以下兩項更改:
1 - 將此行添加到您的requirements.txt檔案中:
uvicorn
2-然后將第一行和最后兩行添加到api.py檔案的末尾:
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return { "Lux app": "Welcome to Lux app" }
@app.post("/extract_text")
def ali():
return {"Hello": "World"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
的結果GET /
{"Lux app":"Welcome to Lux app"}
最后,另一種選擇是遵循 fastAPI 提供的 docker 指南,該指南通過直接使用 uvicorn 呼叫您的 fastapi 模塊來輕松解決這個問題。這將實作與上述相同的效果。
示例Dockerfile:
FROM python:3.9
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/473645.html
