【发布时间】:2022-07-16 22:51:34
【问题描述】:
我有两个服务,predict 和 preprocess 应该通过 REST 进行通信。
我可以按如下方式使用 preprocess_service:
curl -X 'POST' \
'http://0.0.0.0:3000/preprocess' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"feature_1": 1,
"feature_2": 2
}'
我对这两个服务进行了 docker 化,并想在预测服务中调用预处理服务 - 这不起作用。
错误消息说:
requests.exceptions.ConnectionError: HTTPConnectionPool(host='0.0.0.0', port=3000): url: /preprocess 超出了最大重试次数(由 NewConnectionError('
: Failed建立新连接:[Errno 111] Connection denied'))
我做错了什么?
项目结构:
项目:
- 预测服务
- main.py
- requirements.txt
- Dockerfile
- 预处理服务
- main.py
- requirements.txt
- Dockerfile
- docker-compose.yml
predict_service 中的 Dockerfile:
FROM python:3.10
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0"]
preprocess_service 中的 Dockerfile:
FROM python:3.10
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade -r requirements.txt
COPY . .
EXPOSE 3000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0"]
docker-compose.yml:
version: "3"
services:
predict_service:
image: dockerplaygroundpredict:latest
command: uvicorn main:app --host 0.0.0.0
ports:
- "8000:8000"
preprocess_service:
image: dockerplaygroundpreprocess:latest
command: uvicorn main:app --host 0.0.0.0
ports:
- "3000:8000"
最后,这是 predict_service 中应该与 preprocess_service 通信的 main.py:
app = FastAPI(
title="SIMPLE FASTAPI POC",
description="----> PREDICTION",
version="0.1"
)
@app.get("/")
def read_root():
"""Health check."""
return {"message": HTTPStatus.OK.phrase, "status-code": HTTPStatus.OK,}
@app.post("/predict", tags=["Prediction"])
def predict(request: Request, sample: FeatureSample) -> Dict:
"""Predict output for sample input."""
headers = {
'accept': 'application/json',
}
json_data = {
'feature_1': 1,
'feature_2': 2,
}
preprocessing_response = requests.post('http://0.0.0.0:3000/preprocess',
headers=headers, json=json_data)
return {"message": HTTPStatus.OK.phrase, "status-code": HTTPStatus.OK, "data": {"predictions": "Dummy_Prediction"}}
【问题讨论】:
标签: rest docker-compose localhost microservices fastapi