Docker容器连接Windows本地SQL Server失败求助
解决Docker容器连接Windows本地SQL Server的登录超时问题
核心问题定位
容器内的127.0.0.1指向容器自身,而非Windows宿主机,这是导致连接超时的最常见原因。以下是针对性的排查和修复步骤:
1. 修改连接字符串中的主机地址
将连接字符串里的127.0.0.1替换为Windows宿主机的实际IPv4地址(可通过Windows命令行执行ipconfig,查看以太网/WLAN的IPv4地址):
SQLALCHEMY_DATABASE_URL = ( "mssql+pyodbc://user_name:user_password@宿主机实际IP:1433/db_name" "?driver=ODBC+Driver+17+for+SQL+Server" )
2. 修正Docker运行命令的端口映射
你的FastAPI应用使用5001端口,无需映射SQL Server的1433端口(容器是主动发起连接的一方,不是被动接收),调整运行命令为:
docker run -d --name container_name -p 5001:5001 dockerhub_name/image_name:latest
3. 检查Windows防火墙设置
- 确保Windows防火墙允许1433端口的入站连接(针对SQL Server服务)
- 可临时关闭防火墙测试,确认是否是防火墙拦截了容器的连接请求
4. 确认SQL Server远程连接配置
- 在SQL Server配置管理器中,启用TCP/IP协议,且在
IP地址选项卡的IPAll部分,将TCP端口设置为1433 - 在SQL Server Management Studio中,右键实例→属性→连接,勾选“允许远程连接到此服务器”
- 验证SQL Server登录账号的密码正确,且拥有远程连接权限
5. 容器内测试网络连通性
进入容器内部,验证与宿主机的网络连通性:
# 进入容器终端 docker exec -it container_name /bin/bash # ping宿主机IP,检查网络可达性 ping 宿主机实际IP # 测试1433端口是否开放 telnet 宿主机实际IP 1433
如果ping不通或telnet失败,说明网络层面存在问题:Windows下使用WSL2作为Docker后端的话,需确认WSL网络与Windows宿主机的连通性;默认桥接模式即可,无需切换host模式。
6. 验证ODBC驱动兼容性
你当前Dockerfile已正确安装msodbcsql17,确保连接字符串中指定的驱动版本与容器内安装的一致,避免版本不匹配问题。
内容的提问来源于stack exchange,提问作者ardukus
相关产品推荐
相关产品推荐

