ODBC Driver 17连接SQL Server通信失败问题求助(SQLAlchemy环境)
问题:Docker化FastAPI/Go应用连接远程MSSQL突发通信故障
环境信息
- FastAPI应用:fastapi0.87.0、SQLAlchemy1.4.41,Docker化部署于Linux Ubuntu系统
- 远程MSSQL数据库:Windows Server 2019系统,Microsoft SQL Server 2017 (RTM-GDR) (KB5021127) - 14.0.2047.8 (X64)
- 已稳定使用2年的连接字符串:
DATABASE_URL = f"mssql+pyodbc://{config['username']}:{config['password']}@{config['SQLServerProduction']}/{config['db']}?driver=ODBC+Driver+17+for+SQL+Server&use_unicode=1&charset=utf8"
突发故障现象
- FastAPI应用抛出Python错误:
[Microsoft][ODBC Driver 17 for SQL Server]Communication link failure (0)
- 同一服务器上的Docker化GO API也出现连接错误:
/app/site/site.go:192 read tcp **.**.**.**:*****->***.**.***.**:*****: read: connection reset by peer
- 例外情况:同一服务器上另一个直接使用pyodbc库的Docker化Python插入脚本可正常操作数据库,且故障期间数据库其他业务操作无异常
- 关联事件:Windows服务器昨日安装了更新补丁KB5026362(OS Build 17763-4377)
已尝试但无效的操作
- 检查防火墙及路由器日志,确认请求解析、转发正常
- 验证SQL连接池已成功建立连接
- 通过SQL Profiler观察到插入语句已执行但未完成,无错误日志输出
- 重启所有涉及的服务器(应用服务器、数据库服务器)
- 重建所有Docker容器
- 更换连接字符串中的驱动标识为
ODBC+Driver+17+for+SQL+Server和SQL+Server - 确认远程MSSQL服务器已正确安装ODBC Driver 17(版本2017.177.02.01)
临时有效方案
安装pymssql==2.2.7库,修改SQLAlchemy连接字符串为:
DATABASE_URL = f"mssql+pymssql://{config['username']}:{config['password']}{config['SQLServerProduction']}/{config['db']}"
需求
- 提供无需依赖pymssql的解决方案
- 分析本次故障的根因
内容的提问来源于stack exchange,提问作者Kostas Nitaf
相关产品推荐
相关产品推荐

