【发布时间】:2021-04-05 17:24:13
【问题描述】:
我在 shell 中运行一个带有独角兽的 FastAPI。但是当我在 docker 中运行它时,它仍然将输出输出到 shell 而不是像这样的 Docker:
INFO: Started server process [1]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://127.0.0.1:5000 (Press CTRL+C to quit)
如何让应用程序将其输出输出到容器的 shell 并在后台将容器作为普通 Docker 容器运行?
代码如下:
from typing import Optional
import uvicorn
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {"item_id": item_id, "q": q}
if __name__ == "__main__":
uvicorn.run("main:app", host="127.0.0.1", port=5000, log_level="info")
这里是 Dockerfile:
FROM python:3.9.3-buster
WORKDIR /opt
ADD . .
RUN pip install "poetry==1.1.5"
RUN python -m venv /venv
RUN poetry export -f requirements.txt | /venv/bin/pip install -r /dev/stdin
RUN chmod u+x main.py
CMD ["/venv/bin/python", "main.py", "--port", "5000"]
我像这样运行和构建 Docker 映像:
docker build -t example00 .
docker run -p 5000:5000 example00
有人有什么建议吗?
【问题讨论】: