大家好!
我正在使用Docker容器部署FastAPI应用程序时遇到问题。 我已经测试过不使用Docker,仅使用FastAPI进行部署,一切正常。 但是当我使用Docker时,我无法访问API,只得到“连接被拒绝”的消息。
这是我正在使用的Dockerfile:
FROM python:3.7-slim
WORKDIR /app/
COPY . /app/
RUN apt-get update && apt-get install -y --no-install-recommends apt-utils
RUN apt-get -y install curl
RUN apt-get install libgomp1
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host=0.0.0.0", "--reload"]
注意:我需要构建的API专注于机器学习,因此我需要声明一些包以便使用LightGBM。
构建Dockerfile后,我运行了以下Docker命令:
docker build -t ml_app:latest .
docker run -p 8000:8000 --name test_cont ml_app:latest
当我使用 docker ps 检查正在运行的容器时,我发现该容器正常工作,如图所示: docker ps 此外,docker logs 只返回 FastAPI 的默认消息。
INFO: Will watch for changes in these directories: ['/app']
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
INFO: Started reloader process [1] using statreload
INFO: Started server process [7]
INFO: Waiting for application startup.
INFO: Application startup complete.
我正在尝试使用FastAPI在运行容器时指定的URL(http://localhost:8000)访问API。 我已经使用浏览器,curl和Postman发送了针对此URL的请求。
以下是我尝试解决此问题的方法:
1. 更改端口。 2. 使用和不使用EXPOSE命令。 3. 运行Python脚本而不是明确使用uvicorn。 4. 公开与uvicorn参数声明的端口不同(且相等)的端口。
那么,有人知道我做错了什么吗? 或者我应该怎样访问部署在容器中的API?
谢谢大家!
http:// localhost:8000
并查看预期的响应)。 您正在Linux,MacOS还是Windows下运行? - larsks