我有一个在Windows Docker容器中运行的ASP.NET Core WebAPI。我无法从应用程序内部连接到本地SQL实例。
这是错误消息:
(0x80131904):建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称正确,并且已将SQL Server配置为允许远程连接。 (提供者:命名管道提供程序,错误:40-无法打开与SQL Server的连接)---> System.ComponentModel.Win32Exception(53): 找不到网络路径
我找到了this issue on github,但这并不完全适合我的情况。
我可以通过将实例名称替换为服务器本地IP地址来使一切正常工作,
service cloud.firestore {
match /databases/{database}/documents {
match /teachers/{teacher}/classes/{class} {
function isHeadMaster() {
return get(/databases/$(database)/documents/headmasters/$(request.auth.uid)).data.isHM;
}
// HM can read, write classes
allow read, write: if isHeadMaster == true;
}
}
}
这是怎么回事?似乎.NET无法解析域计算机的主机名。
"ConnectionString_ThrowingError": "Data Source=MySqlInstance; (...)"
"ConnectionString_WorkingFine": "Data Source=192.168.0.123; (...)"
和Windows 10
上托管。两者都有完全相同的错误。Windows Server 2019
来。ping
访问Azure上托管的其他SQL实例,而不会出现任何问题。答案 0 :(得分:1)
根据我在评论中的建议,如果服务器名称不是完全限定的域名(FQDN),则可能存在将服务器解析为IP的问题。
尝试将服务器名称调整为FQDN,希望可以解决该问题。
如果失败,请查看诸如this one之类的链接,以从SQL Server的角度确定名称解析,然后您将获得其他一些有关如何解决此类问题的想法。
答案 1 :(得分:0)
检查此docker-composer.yaml,网络和别名部分非常重要,以上设置可以使用docker命令而不是yaml生成。
version: '3.4'
services:
some.api:
image: ${DOCKER_REGISTRY-}someapi
container_name: some.api
build:
context: .
dockerfile: /Dockerfile
ports:
- "40080:80"
- "44443:443"
networks:
- database
some.db:
image: microsoft/mssql-server-linux:2017-latest
container_name: mssql1
networks:
database:
aliases:
- mssql1
environment:
- SA_PASSWORD=Pass@word
- ACCEPT_EULA=Y
ports:
- "5454:1433"
networks:
database:
Server = mssql1;数据库= whatever_is_need;用户ID = sa;密码= Pass @ word;
答案 2 :(得分:-1)
我不了解.NET Core,但是如果您.NET Core在像Web应用程序这样的浏览器实例中运行,我可以给您一些提示,因为容器仅存在于主机中,因此浏览器无法使用“ MySqlInstance”解析您的MYSQL服务器机。检查。.可能就是使用IP起作用的原因。