首页 > 解决方案 > 如何在后台运行 Docker 应用程序而不是输出到终端

问题描述

我在 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

有人有什么建议吗?

标签: dockeruvicorn

解决方案


你需要使用-d标志

docker run -d -p 5000:5000 example00

推荐阅读