我正在做一个以前使用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 Studio或DBeaver毫无问题地连接到容器,并创建一个名为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应用为什么无法连接。
使用此连接字符串。你可以在环回ip前面提到tcp。
"Server=tcp:127.0.0.1,1433;Database=HelpdeskSystem;User=sa;Password=MSSQLContainer1;"