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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 19:27:23