Docker部署MSSQL Server后,SQLAlchemy连接登录超时问题求助
解决Docker中MSSQL Server与SQLAlchemy连接超时问题
针对你在Ubuntu 22.04上遇到的SQLAlchemy连接Docker中MSSQL Server超时(HYT00错误),可以按以下步骤排查修复:
1. 验证Docker容器状态
首先确认MSSQL容器是否正常运行:
- 执行
docker ps查看sql1容器状态,确保状态为Up - 如果容器未启动,执行
docker start sql1 - 查看容器启动日志排查错误:
docker logs sql1,重点检查是否有密码不符合要求或服务启动失败的提示
2. 处理防火墙端口限制
Ubuntu默认启用ufw防火墙,可能阻止了1433端口的访问:
- 临时关闭防火墙测试:
sudo ufw disable,如果连接恢复,说明是防火墙问题 - 永久开放1433端口:
sudo ufw allow 1433/tcp,再重新启用防火墙sudo ufw enable
3. 修正ODBC连接字符串(关键)
ODBC Driver 18默认强制加密连接,而Docker中的MSSQL使用自签名证书,会导致连接验证失败。需要在连接字符串中添加证书信任参数:
修改你的Python脚本中params的定义:
params = urllib.parse.quote_plus("Driver={ODBC Driver 18 for SQL Server};Server=tcp:localhost:1433;Uid=SA;Pwd=YourStrong_Passw0rd;TrustServerCertificate=Yes;")
或者使用Encrypt=optional参数替代,跳过加密要求:
params = urllib.parse.quote_plus("Driver={ODBC Driver 18 for SQL Server};Server=tcp:localhost:1433;Uid=SA;Pwd=YourStrong_Passw0rd;Encrypt=optional;")
4. 确认Ubuntu上ODBC驱动安装完整
确保系统已正确安装微软ODBC驱动及依赖:
- 添加微软APT源:
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
- 更新源并安装驱动:
sudo apt update sudo ACCEPT_EULA=Y apt install -y msodbcsql18 unixodbc-dev
- 确认Python依赖已安装:
pip install sqlalchemy pyodbc
5. 排除SQLAlchemy干扰,直接测试pyodbc连接
先写一个极简测试脚本验证基础连接是否正常:
import pyodbc # 用修改后的连接字符串 conn = pyodbc.connect('Driver={ODBC Driver 18 for SQL Server};Server=tcp:localhost:1433;Uid=SA;Pwd=YourStrong_Passw0rd;TrustServerCertificate=Yes;') cursor = conn.cursor() cursor.execute("SELECT @@VERSION;") row = cursor.fetchone() print(row[0]) conn.close()
如果这个脚本能正常输出SQL Server版本,再回到SQLAlchemy的代码测试。
内容的提问来源于stack exchange,提问作者Tadistyle
相关产品推荐
相关产品推荐

