无法连接到运行在docker上的.net核心应用程序的SQL Server Express

我有SQL Server 2016 Express,用于Windows的Docker和安装在Windows 10机器上的IIS。

SQL Server Expressconfiguration为在1455端口上侦听。 Northwind示例数据库就在那里。

Windows防火墙已禁用。

Ipconfig显示如下:

 Ethernet adapter vEthernet (DockerNAT) 2: Connection-specific DNS Suffix . : Link-local IPv6 Address . . . . . : fe80::70f1:3323:a7a8:b7a5%21 IPv4 Address. . . . . . . . . . . : 10.0.75.1 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : 

我在Visual Studio 2017中创build了一个非常简单的.net core 2控制台应用程序:

 using System; using System.Data.SqlClient; using System.Net.Http; namespace ConnectSqlServer { class Program { static void TestHttp() { using (var client = new HttpClient()) { var response = client.GetAsync("http://10.0.75.1").Result; var content = response.Content.ReadAsStringAsync().Result; Console.WriteLine(content); } } static void Main(string[] args) { TestHttp(); var cn = new SqlConnection("Data Source=10.0.75.1\\SQLEXPRESS,1455;Initial Catalog=Northwind;User ID=docker;Password=SomeStrongPassword;"); cn.Open(); } } } 

从Visual Studio在Windows上运行时,应用程序运行成功。 但是,当我添加Docker支持并运行它,TestHttp方法工作正常,但我不能连接到SQL Server,我得到以下exception:

System.Data.SqlClient.SqlException
与SQL Serverbuild立连接时发生networking相关或特定于实例的错误。 服务器未find或无法访问。 validation实例名称是否正确,并将SQL Serverconfiguration为允许远程连接。 (提供程序:TCP提供程序,错误:40 – 无法打开到SQL Server的连接)

这是我的Dockerfile

 FROM microsoft/dotnet:2.0-runtime ARG source WORKDIR /app COPY ${source:-obj/Docker/publish} . ENTRYPOINT ["dotnet", "ConnectSqlServer.dll"] 

这是我docker-compose.yml

 version: '3' services: connectsqlserver: image: connectsqlserver build: context: ./ConnectSqlServer dockerfile: Dockerfile 

我应该怎样做才能连接到运行在Docker容器上的.net core 2.0应用程序在Windows主机上运行的本地SQL Server Express?

编辑:

答:禁用Windows防火墙时要小心。

我closures了Windows防火墙,但只在域networking上。 Windows将DockerNAT适配器视为公共networking。 所以Windows防火墙阻止了与SQL Server的连接。

我closures了公共networking上的Windows防火墙,现在我可以连接了。

您可以尝试使用networking模式作为主机来启动容器。 在这种情况下,容器可以使用本地主机作为DNS名称连接到主机上运行的应用程序。

 version: '3' services: connectsqlserver: image: connectsqlserver build: context: ./ConnectSqlServer dockerfile: Dockerfile network_mode: "host"