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

如何从Windows容器连接本地SQL Server数据库?

问题:Windows容器内应用无法连接主机SQL Server(TestContainers场景)

我有一个包含应用程序的Windows Docker镜像,该应用需要访问主机上安装的SQL Server(My-Computer\SQLEXPRESS)。使用TestContainers编写集成测试时,容器内应用无法连接数据库,测试代码如下:

_network = new NetworkBuilder()
  .WithName(_name)
  .Build();

_myContainer = new ContainerBuilder()
  .WithImage("myWindowsApplication:1.0.0.0")
  .WithExposedPort(1433)
  .WithNetwork(_network)
  .Build();

await _network.CreateAsync();
await _myContainer.StartAsync();

已尝试的方法均失败:

  • 使用Dotnet.TestContainers.Sql:该包的镜像基于Linux,与Windows镜像冲突;
  • 设置容器为host网络:添加.WithDriver(NetworkDriver.Host)后启动报错:

    Docker.DotNet.DockerApiException : Docker API responded with status code=NotFound, response={"message":"could not find plugin host in v1 plugin registry: plugin not found"}

  • 使用(host.docker.internal)\SQLEXPRESS作为服务器名:连接失败。

解决方案

1. 明确Windows容器的网络限制

Windows容器不支持host网络模式(这是Linux容器专属特性),所以你之前尝试的.WithDriver(NetworkDriver.Host)必然报错,放弃该方案,使用默认的nat网络即可。

2. 修复host.docker.internal连接问题

Windows Docker Desktop默认支持host.docker.internal,连接失败通常是SQL Server的配置问题:

  • 打开SQL Server配置管理器,找到SQL Server网络配置 > SQLEXPRESS的协议,启用TCP/IP;
  • 进入TCP/IP属性的「IP地址」标签,找到IPAll项,设置TCP端口为1433;
  • 重启SQL Server服务;
  • 确保SQL Server开启混合身份验证模式,并创建拥有远程连接权限的数据库账号(授予对应库的访问权限)。

完成配置后,重新尝试用host.docker.internal\SQLEXPRESS作为服务器名连接。

3. 直接使用主机IP地址(备用方案)

如果host.docker.internal仍无法解析,直接使用主机的实际IPv4地址(比如192.168.3.10\SQLEXPRESS)作为服务器名。你可以通过主机执行ipconfig命令,找到以太网/WLAN对应的IPv4地址。

4. 调整防火墙设置

确保主机防火墙允许1433端口的入站连接:

  • 打开Windows Defender防火墙,创建新的入站规则,允许TCP 1433端口的连接;
  • 或者直接允许Docker容器所在的nat网络段访问(可通过docker network inspect nat命令查看子网范围)。

5. 简化TestContainers配置

不需要自定义网络,默认的nat网络已足够容器访问主机,修改后的代码:

_myContainer = new ContainerBuilder()
  .WithImage("myWindowsApplication:1.0.0.0")
  .WithExposedPort(1433)
  .Build();

await _myContainer.StartAsync();

6. 测试连通性(排查用)

如果仍无法连接,可在容器内测试连通性:

  1. 进入容器命令行:docker exec -it <容器ID> cmd
  2. ping主机IP:ping 192.168.3.10(确认网络可达)
  3. 测试1433端口:telnet 192.168.3.10 1433(确认端口开放)

内容的提问来源于stack exchange,提问作者user2896152

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 13:37:42