在 docker 容器中连接到 SQL Server 时出现 .Net 错误

.Net error connecting to SQL Server in docker container

提问人:Paul Vinogradov 提问时间:7/26/2023 更新时间:7/26/2023 访问量:54

问:

我有 2 个 docker 容器,一个带有 sqlexpress,一个带有我的 asp.net 应用程序。这两个容器位于同一网络中,并且相互查看。我可以使用 SQL Management Studio 从主机连接到数据库,也可以使用以下方法从应用容器连接到数据库:

./sqlcmd -S sql,1433 -U sa -P Password1! -C

但是当我连接我的应用程序时,我得到:

找不到服务器或无法访问服务器。验证 实例名称正确,并且 SQL Server 配置为允许 远程连接。(提供程序:TCP 提供程序,错误:40 - 无法 打开与 SQL Server 的连接:无法打开与 SQL 的连接 服务器)

我使用的连接字符串是这样的:

"WebDBConnection": "Server=sql,1433;Database=EmerseDB;Integrated Security=false;User ID=sa;Password=Password1!;"

我尝试了连接字符串中的不同参数组合,有/没有受信任的证书、集成安全性、端口、数据源而不是服务器等。 我也像这样使用 dbcontext:

builder.Services.AddDbContextPool<WebDBContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("WebDBConnection")));
asp.net docker sql-server-express sqlcmd

评论

0赞 Aaron Bertrand 7/26/2023
这回答了你的问题吗?从另一个 Docker 容器连接到在 Docker 容器中运行的 SQL Server 数据库
0赞 Paul Vinogradov 7/26/2023
@AaronBertrand不完全是,因为我已经设置了网络,并且可以使用 sqlcmd 工具从我的 docker 容器中连接。因此,容器之间的联系是清晰存在的。我还可以将 ip 和 tcp 从 .Net 连接到端口。只有 .Net db 连接失败
0赞 Manoj Agrawal 7/31/2023
确保两个 Docker 容器位于同一网络上,不受网络限制。验证 SQL Server Express 侦听端口 1433 并允许远程连接。在连接字符串中使用“数据源”而不是“服务器”。检查 SQL Server 身份验证、网络连接和容器名称。查看 SQL Server 日志并测试与简单 .NET Core 应用的连接,以隔离问题。仔细检查连接字符串是否有拼写错误。

答: 暂无答案