在 docker 容器中连接到 SQL Server 时出错

Jus*_*ard 5 c# docker .net-core asp.net-core docker-for-windows

我有一个在 Windows Docker 容器内运行的 ASP.NET Core WebAPI。我在从应用程序内部连接到本地 SQL 实例时遇到问题。

这是错误消息:

(0x80131904):建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接。(提供程序:命名管道提供程序,错误:40 - 无法打开与 SQL Server 的连接)---> System.ComponentModel.Win32Exception (53): 找不到网络路径

在 github 上发现了这个问题,但它并不真正适用于我的情况。

我可以通过用服务器本地 IP 地址替换实例名称来使一切正常,如下所示:

"ConnectionString_ThrowingError": "Data Source=MySqlInstance; (...)"
"ConnectionString_WorkingFine":   "Data Source=192.168.0.123; (...)"
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?.NET 似乎无法解析域机器主机名。


其他详情

  • 使用 .Net Core 2.2
  • 在 Windows 上使用 Docker Windows 容器
  • 尝试在Windows 10和上托管Windows Server 2019。两者都有完全相同的错误。
  • 我可以ping使用其主机名或本地 IP 从容器内部获取 SQL 实例。
  • 当我用连接字符串中的本地 IP 地址替换实例名称时,一切正常。
  • 如果我在 .NET CLI 中运行应用程序,一切正常(不使用 Docker)
  • 我尝试访问的 SQL 实例未托管在 Docker 上。它托管在同一本地网络上的另一个 Windows Server 上。
  • 我可以DataSource=MyAzureServer.database.windows.net毫无问题地访问 Azure 上托管的其他 SQL 实例。

Mr *_*ose 3

根据我在评论中的建议,如果服务器名称不是完全限定域名 (FQDN),则在将服务器解析为 IP 时可能会出现问题。

尝试将服务器名称调整为 FQDN,希望能够解决该问题。

如果做不到这一点,请查看诸如此类的链接,SQL Server 的角度解决名称解析问题,您将获得一些有关如何解决此类问题的其他想法。