![](/img/trans.png)
[英]Problems connecting Azure Sql Server database on docker container
[英]Error when connecting to SQL Server in docker container
我有一個 ASP.NET Core WebAPI 在 Windows Docker 容器中運行。 我在從應用程序內部連接到本地 SQL 實例時遇到問題。
這是錯誤消息:
(0x80131904):與 SQL 服務器建立連接時發生與網絡相關或特定於實例的錯誤。 服務器未找到或無法訪問。 驗證實例名稱是否正確以及 SQL 服務器是否配置為允許遠程連接。 (提供程序:命名管道提供程序,錯誤:40 - 無法打開與 SQL 服務器的連接)---> System.ComponentModel.Win32Exception (53): The.network path was not found
我在 github 上發現了這個問題,但它並不適用於我的情況。
我可以通過將實例名稱替換為服務器本地 IP 地址來使一切正常,如下所示:
"ConnectionString_ThrowingError": "Data Source=MySqlInstance; (...)"
"ConnectionString_WorkingFine": "Data Source=192.168.0.123; (...)"
這里發生了什么? 似乎 .NET 無法解析域機器主機名。
Windows 10
和Windows Server 2019
上托管。 兩者都有完全相同的錯誤。ping
SQL 實例。DataSource=MyAzureServer.database.windows.net
訪問托管在 Azure 上的其他 SQL 實例,沒有任何問題。根據我在評論中的建議,如果服務器名稱不是完全限定的域名(FQDN),則可能在將服務器解析為IP時出現問題。
嘗試將服務器名稱調整為FQDN,希望能解決它。
如果做不到這一點,看看鏈接,如這一個從SQL Server的角度制定出名字解析,你會得到一些其他的想法,你如何解決此類問題。
檢查這個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; Database = whatever_is_need; User Id = sa; Password = Pass @ word;
我和你有同樣的問題。 連接字符串中的服務器名稱和容器名稱應該相同。
我不知道.NET Core但我可以給你一些提示,如果你的.NET Core在瀏覽器實例中運行,如瀏覽器無法使用“MySqlInstance”解析你的MYSQL服務器,因為容器只存在於主機中。 檢查..這可能就是為什么使用它工作的IP。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.