提问者:小点点

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


我正在做一个以前使用MySQL的大学小组项目,但是团队决定搬到MS SQL Server Express。我是唯一使用Mac的团队成员,所以我正在尝试让项目连接到docker容器。我在Visual Studio for Mac工作。

我已经创建并启动了一个 SQL Express 2017容器:

docker run-d-name sqlexpress-e ' ACCEPT _ EULA = Y '-e ' SA _ PASSWORD = mssqlcontainer 1 '-e ' MSSQL _ PID = Express '-p 1433:1433-d mcr.microsoft.com/mssql/server:2017-latest-ubuntu

运行时是这样的:

集装箱编号:e448f6e4df4

图片: mcr.microsoft.com/mssql/server: 2017-最新-ubuntu

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

创建时间:21小时前

状态:上升21小时

端口:0.0.0.0:1433-

名称:sqlexpress

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

Microsoft SQL Server 2017 (RTM-CU16) (KB4508218) - 14.0.3223.3 (X64) Jul 12 2019 17:43:08 版权所有 (C) 2017 Microsoft Corporation Express Edition (64-bit) on Linux (Ubuntu 16.04.6 LTS)

我能够从Azure Data StudioDBeaver毫无问题地连接到容器,并创建一个名为HelpdeskSystem的数据库。

但是我一辈子都无法让我们的 .NET Core 应用程序连接到数据库。

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

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

此外,这是我的队友在他们的Windows机器上使用的连接字符串的样子(我也尝试在我的字符串中包含这些额外的属性):

" server = localhost \ \ sqlexpressDatabase = HelpdeskSystemTrusted _ Connection = True集成安全性= TrueMultipleActiveResultSets=true "

当我试图运行一个需要数据库连接的单元测试时,我得到了这个异常:

InnerException: {System.Net.Sockets.SocketException (0x80004005): undefined error: 0 at System.Data.SqlClient.SNI.SSRP.GetPortByInstanceName(String browserHostName, String instanceName) at System.Data.SqlClient.SNI.SNIProxy.CreateTcpHandle(DataSource details, Int64 timerExpire, Object callbackObject, Boolean parallel)}

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

我不确定我的字符串是否错误,或者是否有其他潜在问题阻止web应用连接,但我肯定能够使用Azure Data Studio连接到容器,因此我不知道web应用为什么无法连接。


共1个答案

匿名用户

使用此连接字符串。你可以在环回ip前面提到tcp。

"Server=tcp:127.0.0.1,1433;Database=HelpdeskSystem;User=sa;Password=MSSQLContainer1;"