我们有一个ASP.NET Core 2.2应用程序,它的后端数据库完美地托管在单独的服务器上。所有CRUD操作均完美无缺。我们对应用程序进行了docker化处理,但开始收到以下错误消息:
建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者:SQL网络接口,错误:26-指定服务器/实例时出错)
docker撰写文件看起来像以下代码:
version: '3.4'
services:
services.webapi:
image: ${DOCKER_REGISTRY-}serviceswebapi
build:
context: .
dockerfile: Services.WebApi\Dockerfile
network: host
此配置中可能有什么问题阻碍了应用程序与SQL Server实例进行通信?
更新1 :未对SQL Server进行Docker化。
更新2 :应用程序从其appsettings.json文件中读取SQL连接字符串。重命名服务器名称和凭据后,这是连接字符串:
Server=WIN-MSSQL1\\MSSQLSERVER2017;Initial Catalog=ServiceDB;User ID=cruduser;Password=foo;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False
答案 0 :(得分:1)
通常情况下,您可以通过以下方式通过composer文件将sql主机名添加到容器的/ etc / hosts文件中来进行修复:
version: '3.4'
services:
services.webapi:
image: ${DOCKER_REGISTRY-}serviceswebapi
build:
context: .
dockerfile: Services.WebApi\Dockerfile
network: host
extra_hosts:
- "WIN_MSSQL1:192.168.0.1"
很遗憾,此issue在composer文件中添加extra_hosts无效,我希望他们尽快解决该问题。
因此,为了使连接正常工作,请用SQL Server的IP地址替换主机名:
从这里:
Server=WIN-MSSQL1\\MSSQLSERVER2017;Initial Catalog=ServiceDB;User ID=cruduser;Password=foo;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False
对此:
Server=192.168.0.1\\MSSQLSERVER2017;Initial Catalog=ServiceDB;User ID=cruduser;Password=foo;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False