Docker 退出代码 0 问题
Docker exit code 0 issue
这是我尝试 docker 化 fastapi 脚本后的日志:
$ docker-compose logs -f
Attaching to docker-name
docker-name exited with code 0
这是我的 docker 撰写文件:
version: '3'
services:
observatory-service:
build: ./observatory
volumes:
- ./observatory:/usr/src/app
ports:
- 8000:8000
docker 文件:
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.
问题是您直接使用 python 调用 fastAPI 服务器脚本,而不是用 Uvicorn 等 ASGI 网络服务器包装。 debugging page of 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"}
最后,另一种选择是 following the docker guide provided by fastAPI,它通过直接使用 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"]
这是我尝试 docker 化 fastapi 脚本后的日志:
$ docker-compose logs -f
Attaching to docker-name
docker-name exited with code 0
这是我的 docker 撰写文件:
version: '3'
services:
observatory-service:
build: ./observatory
volumes:
- ./observatory:/usr/src/app
ports:
- 8000:8000
docker 文件:
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.
问题是您直接使用 python 调用 fastAPI 服务器脚本,而不是用 Uvicorn 等 ASGI 网络服务器包装。 debugging page of 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"}
最后,另一种选择是 following the docker guide provided by fastAPI,它通过直接使用 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"]