我爲我的.NET程序創建了一個Dockerfile。該程序在我的桌面上以及沒有Docker的Windows Server 2016(Azure VM)上運行良好。當我嘗試將其作爲容器運行時(基於microsoft/windowsservercore),那麼當連接到我的Azure SQL實例時,我經常會遇到數據庫錯誤。Windows容器導致Azure SQL連接失敗
我有兩個Azure SQL實例正在運行(P1和空載)。當建立連接時,它們非常快,但問題是連接通常無法建立。看起來網絡非常不穩定。這些是我扔的典型錯誤:
System.Data.SqlClient.SqlException: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
內部異常報告網絡路徑找不到。起初我以爲它可能是我的本地機器,但它在Azure中的Windows Server 2016(帶容器)VM實例上也存在問題。
爲了查明問題,我創建了一個每5秒鐘連接到我的數據庫的測試程序(並運行SELECT COUNT(*) from sysobjects
)。這個程序總是能夠找到數據庫。
看來,我的其他程序經常在啓動過程中失敗,但在初始化過程中有很多數據庫調用。我懷疑線程,連接池,有什麼不同...
任何線索?
命名管道提供的是一個在哪些SQL嘗試,如果你沒有明確設置協議使用協議的順序。所以如果你想避免首先嚐試netpipes,你必須強制SQL使用tcp。 –