.net 无法从Docker容器内的应用程序连接本地MS SQL Server

.net 无法从Docker容器内的应用程序连接本地MS SQL Server,.net,sql-server,docker,.net,Sql Server,Docker,我创建了一个简单的.NET Core 3.1控制台应用程序,使用ADO.NET连接到SQL Server。它与dotnet run一起工作正常,并返回结果。但是当我在docker上部署这个应用程序时,我得到了一个与网络相关的错误 我的控制台应用程序代码如下: using System; using System. Data; using System.Data.SqlClient; namespace app1 { class Program { static

我创建了一个简单的.NET Core 3.1控制台应用程序,使用ADO.NET连接到SQL Server。它与
dotnet run
一起工作正常,并返回结果。但是当我在docker上部署这个应用程序时,我得到了一个与网络相关的错误

我的控制台应用程序代码如下:

using System;
using System. Data;
using System.Data.SqlClient;

namespace app1
{
    class Program
    {
        static void Main(string[] args)
        {
             SqlConnection con = new SqlConnection("Data Source=host.docker.internal,1433;Initial Catalog = SampleDb;Persist Security Info=False;User Id=sa;Password=password0;MultipleActiveResultSets=true;Encrypt=True;TrustServerCertificate=True;Connection Timeout=30;");
             con.Open();

             SqlDataAdapter ad = new SqlDataAdapter("select * from employee", con);
             con.Close();

             DataTable dt = new DataTable();
             ad.Fill(dt);

             for (int i = 0; i < dt.Rows.Count; i++)
             {
                 int a = Convert.ToInt32(dt.Rows[i][0]);
                 string b = dt.Rows[i][1].ToString();
                 string c = dt.Rows[i][2].ToString();
                 string d = dt.Rows[i][3].ToString();
                 int e = Convert.ToInt32(dt.Rows[i][4]);

                 Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}",a,b,c,d,e);
             }
        }
    }
}
错误是:

未处理的异常

System.Data.SqlClient.SqlException(0x80131904):建立到SQL Server的连接时发生与网络相关或特定于实例的错误。找不到服务器或无法访问服务器。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:TCP提供程序,错误:0-连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应。)

System.ComponentModel.Win32Exception(10060):连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应

位于System.Data.SqlClient.SqlInternalConnectionDS..ctor(DbConnectionPoolIdentity、SqlConnectionString connectionOptions、SqlCredential凭证、对象提供信息、String newPassword、SecureString newSecurePassword、Boolean redirectedUserInstance、SqlConnectionString userConnectionOptions、SessionData reconnectSessionData、Boolean applyTransientFaultHandling、String accessToken)
位于System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions、DbConnectionPoolKey、Object poolGroupProviderInfo、DbConnectionPool、DbConnectionOwningConnection、DbConnectionOptions用户选项)
位于System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool池、DbConnectionOwningObject、DbConnectionOptions选项、DbConnectionPoolKey池键、DbConnectionOptions用户选项)
位于System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection-owningObject、DbConnectionOptions-userOptions、DbConnectionInternal-oldConnection)
位于System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject、DbConnectionOptions userOptions、DbConnectionInternal oldConnection)
在System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject、UInt32 waitForMultipleObjectsTimeout、布尔allowCreate、布尔onlyOnEckConnection、DbConnectionOptions userOptions、DbConnectionInternal和connection)
在System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject、TaskCompletionSource
1重试、DbConnectionOptions用户选项、DbConnectionInternal和connection)的System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection、TaskCompletionSource
1重试、DbConnectionOptions用户选项、DbConnectionInternal oldConnection、DbConnectionInternal&connection)
在System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource
1重试,DbConnectionOptions用户选项)在System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection、DbConnectionFactory connectionFactory、TaskCompletionSource
1重试,DbConnectionOptions用户选项)
在System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1重试)
位于System.Data.SqlClient.SqlConnection.Open()
在C:\app\Program.cs中的app1.Program.Main(字符串[]args)处:第15行 客户端连接ID:00000000-0000-0000-0000-000000000000

错误号:10060,状态:0,类别:20


警告。
host.docker.internal
,该公司表示,这是出于开发目的,在docker Desktop for Windows之外的生产环境中不起作用。
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/sdk:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT [ "dotnet","app1.dll" ]