Docker中ASP.NET Core 8.0 Web API连接本地SQL Server Express失败求助
解决Docker中ASP.NET Core 8.0连接本地SQL Server Express的问题
问题概述
启用Docker的ASP.NET Core 8.0 Web API项目,在IIS中能正常连接本地SQL Server Express,但Docker启动时出现错误:
建立与SQL Server的连接时出现与网络相关或特定于实例的错误。找不到服务器或无法访问。验证实例名称是否正确,并且SQL Server配置为允许远程连接。(provider: TCP Provider, error: 26 - 定位指定的服务器/实例时出错)
核心原因
- Docker容器是独立环境,无法直接识别本地的
.\SQLEXPRESS实例 - SQL Server Express默认可能未启用TCP/IP协议,或未设置固定端口
- Windows集成身份验证(
Integrated Security=True)在Docker容器中无法直接使用
分步解决方案
1. 配置SQL Server Express的TCP/IP协议
- 打开SQL Server配置管理器,展开
SQL Server网络配置,选择SQLEXPRESS的协议 - 右键
TCP/IP,选择启用 - 双击
TCP/IP,切换到IP地址标签:- 拉到最底部,找到
IPAll,将TCP端口设置为1433 - 重启
SQL Server (SQLEXPRESS)服务(在SQL Server服务节点操作)
- 拉到最底部,找到
2. 修改连接字符串
替换原有的集成身份验证为SQL Server身份验证,同时修正数据源地址:
Data Source=host.docker.internal,1433;Initial Catalog=CoreDb;User ID=sa;Password=你的SA账户密码;Pooling=False;Encrypt=False;Trust Server Certificate=False
host.docker.internal:Docker Desktop提供的本地主机别名,容器通过它访问本地机器- 移除
\SQLEXPRESS:因为已经将实例绑定到固定1433端口,无需指定实例名 - 替换
Integrated Security=True为User ID和Password:容器无法使用本地Windows账户的集成验证,需用SQL Server账户(推荐启用SA账户)
3. 确保SQL Server允许远程访问并启用SA账户
- 打开SQL Server Management Studio(SSMS),连接到
SQLEXPRESS实例 - 右键服务器 → 属性 → 连接,勾选允许远程连接到此服务器
- 展开
安全性→登录名→ 右键sa→ 属性:- 在
常规标签设置SA账户密码(需符合复杂度要求) - 在
状态标签,将登录设置为启用
- 在
4. Docker启动注意事项
Dockerfile中的EXPOSE仅为端口声明,启动容器时需映射Web API的端口到本地,命令示例:
docker run -d -p 8080:8080 -p 8081:8081 --name my-api 你的镜像名称
无需额外映射SQL Server的1433端口,只要本地SQL服务已开放1433端口,容器即可通过host.docker.internal访问
常见错误排查
- 若使用
host.docker.internal仍无法连接:检查Windows防火墙是否允许1433端口的入站连接 - 若出现登录失败错误:确认SA账户密码正确,且已启用登录权限
- 若仍提示定位实例错误:验证SQL Server服务是否正常运行,TCP/IP协议是否已启用并绑定1433端口
内容的提问来源于stack exchange,提问作者Unnamed
相关产品推荐
相关产品推荐

