You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI+GCP+Docker架构下跨API通信出现SSLEOFError问题求助

FastAPI+GCP+Docker架构下跨API通信出现SSLEOFError问题求助

大家好,我现在遇到一个非常棘手的问题,想请教一下社区的朋友们。我的微服务架构部署在GCP上,用Python+FastAPI开发并做了Docker化处理,一共有7个API服务,互相之间通过HTTP请求完成通信。

三周前,我完全没有改动任何代码的情况下,突然出现了一个通信错误,实在找不到原因,希望能得到大家的帮助。


错误场景与具体报错

这个错误出现在Shipping API调用E-CommerceCommunication API的环节,报错信息如下:

urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='anyurl', port=443): Max retries exceeded with url: /anyEndpoint (Caused by SSLError(SSLEOFError(8, '[SSL: UNEXPECTED_EOF_WHILE_READING] EOF occurred in violation of protocol (_ssl.c:1002)')))

奇怪的是,这个错误是在Shipping API完成两个正常HTTP请求后才触发的,完整的业务流程是:

  • 生成运单(HTTP请求,正常完成)
  • 为运单生成PDF文件(HTTP请求,正常完成)
  • 向E-Commerce API发送物流信息(HTTP请求,此处失败)

相关配置与代码

Dockerfile

FROM python:3.11-slim-bookworm

COPY . .

ENV PYTHONUNBUFFERED=1

RUN pip install -r requirements.txt

CMD exec gunicorn --bind :$PORT --workers 4 --worker-class uvicorn.workers.UvicornWorker --timeout 3600 Main:app

依赖包清单(requirements.txt)

-i https://pypi.org/simple

anyio==3.7.0 ; python_version >= '3.7'
cachetools==5.3.1 ; python_version >= '3.7'
certifi==2023.5.7 ; python_version >= '3.6'
charset-normalizer==3.1.0 ; python_full_version >= '3.7.0'
click==8.1.3 ; python_version >= '3.7'
colorama==0.4.6 ; platform_system == 'Windows'
fastapi==0.99.1
fuzzywuzzy==0.18.0
google-api-core==2.11.1 ; python_version >= '3.7'
google-auth==2.21.0 ; python_version >= '3.6'
google-cloud-core==2.3.2 ; python_version >= '3.7'
google-cloud-storage==2.10.0
google-crc32c==1.5.0 ; python_version >= '3.7'
google-resumable-media==2.5.0 ; python_version >= '3.7'
googleapis-common-protos==1.59.1 ; python_version >= '3.7'
greenlet==2.0.2 ; platform_machine == 'aarch64' or (platform_machine == 'ppc64le' or (platform_machine == 'x86_64' or (platform_machine == 'amd64' or (platform_machine == 'AMD64' or (platform_machine == 'win32' or platform_machine == 'WIN32')))))
gunicorn==20.1.0
h11==0.14.0 ; python_version >= '3.7'
idna==3.4 ; python_version >= '3.5'
levenshtein==0.21.1
numpy==1.25.0 ; python_version >= '3.10'
pandas==2.0.3
protobuf==4.23.3 ; python_version >= '3.7'
pyasn1==0.5.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'
pyasn1-modules==0.3.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'
pydantic==1.10.10 ; python_version >= '3.7'
pymysql==1.1.0
pypdf==3.12.0
python-dateutil==2.8.2 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
python-dotenv==1.0.0
python-multipart==0.0.6
pytz==2023.3
rapidfuzz==3.1.1 ; python_version >= '3.7'
requests==2.31.0 ; python_version >= '3.7'
rsa==4.9 ; python_version >= '3.6' and python_version < '4'
setuptools==68.0.0 ; python_version >= '3.7'
six==1.16.0 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'
sniffio==1.3.0 ; python_version >= '3.7'
sqlalchemy==2.0.17
starlette==0.27.0 ; python_version >= '3.7'
suds==1.1.2
typing-extensions==4.7.1 ; python_version >= '3.7'
tzdata==2023.3 ; python_version >= '2'
urllib3==1.26.16 ; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'
uvicorn==0.22.0

出错的请求代码

这是Shipping API调用E-CommerceComm-API的核心代码:

from Models.PydanticSchemes.GuidesScheme import DbGuides
import requests

class ECommerceCommunicationsAPI():
    @staticmethod
    def UpdateOrders(Orders: list[DbGuides]):
        URL = "https://myurl.com/updateOrders"
        payload = []
        for order in Orders:
            tracking_urls = {
                "Domina" : f"https://oriontracking.infokairos.com.co/envios/{order.GuideNumber}/tracking/cliente",
                "E-Box" : f"https://enviexpresslogistica.com/tracking/result/?NoGuia={order.GuideNumber}",
                "Coordinadora" : f"https://www.coordinadora.com/portafolio-de-servicios/servicios-en-linea/rastrear-guias/?guia={order.GuideNumber}"
            }
            orderJson = {
                "OrderNumber" : order.OrderNumber,
                "GuideNumber" : order.GuideNumber,
                "Company" :  order.Company,
                "Tracking_URL" : tracking_urls[order.Company]
            }
            payload.append(orderJson)
        
        response = requests.post(URL, json = payload, verify = False) # 已经关闭证书验证,但问题依旧

已尝试的解决方案

我已经试过以下几种方法,但都没能解决问题:

  • 将Docker基础镜像从python:3替换为python:3.11-slim-bookworm
  • 删除所有依赖包后重新安装
  • 卸载了pyopenssl库
  • 将容器推送到全新的GCP实例运行

希望有经验的朋友能给我一些排查方向或者解决方案,非常感谢!

备注:内容来源于stack exchange,提问作者Dann V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 07:18:12