在Render上使用Docker+pyodbc连接SQL Server时遭遇0A00014D SSL/TLS错误的解决求助
在Render上使用Docker+pyodbc连接SQL Server时遭遇0A00014D SSL/TLS错误的解决求助
我正在使用FastAPI、SQLAlchemy和pyodbc开发Python应用,并部署到Render平台。但在尝试连接SQL Server数据库时,遇到了以下SSL/TLS相关的错误,一直无法解决,希望能得到帮助:
(pyodbc.Error) ('0A000', '[0A000] [Microsoft][ODBC Driver 18 for SQL Server]SSL Provider: [error:0A00014D:SSL routines::invalid version number] (-1) (SQLDriverConnect)')
以下是我的数据库连接配置代码:
import urllib.parse from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker # params = urllib.parse.quote_plus( # f"DRIVER={{ODBC Driver 18 for SQL Server}};" # f"SERVER={SERVER},{PORT};" # f"DATABASE={DATABASE};" # f"UID={USERNAME};" # f"PWD={PASSWORD};" # f"TrustServerCertificate=yes;" # "Encrypt=no" # ) # connection_string = f"mssql+pyodbc:///?odbc_connect={params}" # engine = create_engine(connection_string) # SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
我已经尝试过将Encrypt设置为yes,还添加了MinTLSVersion=1.0参数,但错误依然存在。
这是我使用的Dockerfile:
FROM python:3.11-slim ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 ENV OPENSSL_CONF=/etc/ssl/openssl.cnf COPY openssl.cnf /etc/ssl/openssl.cnf RUN apt-get update && apt-get install -y \ curl gnupg apt-transport-https unixodbc unixodbc-dev gcc g++ \ && curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null \ && echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/microsoft.gpg] https://packages.microsoft.com/debian/12/prod bookworm main" > /etc/apt/sources.list.d/mssql-release.list \ && apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql18 \ && apt-get clean && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY requirements.txt ./ RUN pip install --upgrade pip && pip install -r requirements.txt COPY . . EXPOSE 5000 CMD ["gunicorn", "app:app", "--bind", "0.0.0.0:5000"]
我已经尝试过以下几种方式来排查问题:
- 切换使用ODBC Driver 17和18版本
- 添加
TrustServerCertificate=yes参数 - 分别尝试
Encrypt=no和Encrypt=yes配置 - 添加
MinTLSVersion=1.0参数 - 确认数据库可访问且账号密码正确
请问我该如何解决这个在Render上的Docker容器中使用pyodbc时出现的0A00014D SSL/TLS错误?这个问题是和TLS配置、OpenSSL版本有关,还是Render平台处理出站连接的方式导致的?
内容来源于stack exchange
相关产品推荐
相关产品推荐

