如何在后台 运行 Docker 应用程序而不是输出到终端
How to run Docker app in background instead of output to terminal
我 运行 在 shell 中使用 unicorn 使用 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")
这是 Docker 文件:
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
有人有什么建议吗?
你需要使用-d
标志
docker run -d -p 5000:5000 example00
来自docker run --help
:
Options:
-d, --detach Run container in background and print container ID
因此,您可以选择 docker run -d -p 5000:5000 example00
。要检查您的容器是否正常启动,您可以使用 -d
标志和 运行:
返回的容器 ID
docker logs -f <container-ID>
并希望看到您的日志(-f
标志表示 Follow log output
):
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)
在这种情况下,您的 CTRL+C
不会停止 FastAPI 服务器,只会取消 docker logs -f
命令。如果要停止 运行ning 容器,请改用 docker stop <container-ID>
。
我 运行 在 shell 中使用 unicorn 使用 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")
这是 Docker 文件:
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
有人有什么建议吗?
你需要使用-d
标志
docker run -d -p 5000:5000 example00
来自docker run --help
:
Options:
-d, --detach Run container in background and print container ID
因此,您可以选择 docker run -d -p 5000:5000 example00
。要检查您的容器是否正常启动,您可以使用 -d
标志和 运行:
docker logs -f <container-ID>
并希望看到您的日志(-f
标志表示 Follow log output
):
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)
在这种情况下,您的 CTRL+C
不会停止 FastAPI 服务器,只会取消 docker logs -f
命令。如果要停止 运行ning 容器,请改用 docker stop <container-ID>
。