为什么MacOS上的.NET Core项目无法连接到SQL Server Express Docker容器?

时间:2019-10-01 10:41:42

标签: sql-server macos docker asp.net-core

我正在做一个大学小组项目,该项目以前使用MySQL,但是团队决定迁移到MS SQL Server Express。我是使用Mac的唯一团队成员,因此我正在尝试使项目连接到Docker容器。我正在Mac的Visual Studio中工作。

我已经使用以下方法创建并启动了SQL Express 2017容器:

  

docker run -d --name sqlexpress -e'ACCEPT_EULA = Y'-e'SA_PASSWORD = MSSQLContainer1'-e'MSSQL_PID = Express'-p 1433:1433 -d mcr.microsoft.com/mssql/server:2017 -latest-ubuntu

运行时如下所示:

  

容器ID:e448f6e4df4

     

图像:mcr.microsoft.com/mssql/server:2017-latest-ubuntu

     

命令:“ / opt / mssql / bin / sqls…”

     

创建:21小时前

     

状态:最多21小时

     

端口:0.0.0.0:1433-> 1433 / tcp

     

名称:sqlexpress

当我在docker中运行SQL Server并输入SELECT @@ VERSION时:

  

Microsoft SQL Server 2017(RTM-CU16)(KB4508218)-14.0.3223.3(X64)   2019年7月12日17:43:08   版权所有(C)2017 Microsoft Corporation   Linux(Ubuntu 16.04.6 LTS)上的Express Edition(64位)

我能够从 Azure Data Studio DBeaver 连接到容器,而没有任何问题,并创建了一个名为 HelpdeskSystem 的数据库

但是我无法终生获得.NET Core应用程序以连接到数据库。

这是我当前的连接字符串;但是,我尝试了不同的变化:

  

“ Server = localhost \\ sqlexpress,1433; Database = HelpdeskSystem; User = sa; Password = MSSQLContainer1;”

这也是我的队友在Windows计算机上使用的连接字符串的样子(而且我也尝试在字符串中包括那些额外的属性):

  

“ server = localhost \\ sqlexpress;数据库= HelpdeskSystem; Trusted_Connection = True;集成安全性= True; MultipleActiveResultSets = true”

当我尝试运行需要数据库连接的单元测试时,出现此异常:

  

InnerException:{System.Net.Sockets.SocketException(0x80004005):未定义错误:System.Data.SqlClient.SNI.SNIProxy处System.Data.SqlClient.SNI.SSRP.GetPortByInstanceName(String browserHostName,String instanceName)处为0 .CreateTcpHandle(数据源详细信息,Int64 timerExpire,对象callbackObject,布尔型并行)}

     

消息:“与SQL Server建立连接时发生与网络有关或特定于实例的错误。找不到服务器或无法访问该服务器。请验证实例名称正确且SQL Server配置为允许远程连接。(提供者:TCP Provider,错误:25-连接字符串无效)“

我不确定我的字符串是否错误,或者是否存在其他一些导致Web应用程序无法连接的潜在问题,但是我肯定能够使用Azure Data Studio连接到容器,所以我不明白为什么该网络应用将无法运行。

1 个答案:

答案 0 :(得分:0)

使用此连接字符串。您可以在回送ip中提及tcp infront。

labeli