簡體   English   中英

從 docker 容器連接到 SQL Server 數據庫

[英]Connect to SQL Server database from a docker container

我的機器上安裝了適用於 Windows 的 docker。 有一個面向 .net core 1.0.0 的控制台應用程序試圖訪問在不同 VM 上運行的 SQL Server 數據庫。 我可以從我的機器 ping 運行 SQL Server 的 VM。

當我嘗試使用dotnet run從我機器上的命令提示符運行控制台應用程序時,它工作正常。 但是當同一個應用程序在 docker 容器中運行時,我收到一條消息

與 SQL Server 建立連接時發生與網絡相關或特定於實例的錯誤。 服務器未找到或無法訪問。 驗證實例名稱是否正確以及 SQL Server 是否配置為允許遠程連接。 (提供程序:TCP 提供程序,錯誤:40 - 無法打開與 SQL Server 的連接)

我嘗試使用

docker run --add-host sqldemo:<VM running sql server ip here>

但這沒有區別。

假設

  • 微軟 SQL Server 2016
  • Windows 10 周年更新
  • 視窗容器
  • ASP.NET 核心應用程序

將 SQL 用戶添加到 SQL 數據庫。

  • 在 MS SQL 中擴展數據庫
  • 右鍵單擊“安全/登錄”
  • 選擇“新登錄”
  • 創建用戶名和密碼。
  • 分配“服務器角色”...我使用 sysadmin,因為我只是在測試
  • 在“用戶映射”下,我將我的新用戶添加到我的數據庫並使用“dbo”作為模式。

更改 SQL 身份驗證以允許 SQL Server 身份驗證模式

右鍵單擊您的數據庫,選擇“屬性/安全/服務器身份驗證/SQL Server 和 Windows 身份驗證模式”單選按鈕。 重新啟動 MS SQL 服務。

使用您的新用戶名和密碼更新您的 appsettings.json

示例

"ConnectionStrings": {
        "DefaultConnection": "Server=YourServerName;Database=YourDatabaseName;MultipleActiveResultSets=true;User Id=UserNameYouJustAdded;Password=PassordYouJustCreated"
},

確保刪除Trusted_Connection=True

創建一個 Docker 文件

我的示例 Docker 文件

FROM microsoft/dotnet:nanoserver
ARG source=.
WORKDIR /app 
EXPOSE 5000 
EXPOSE 1433 
ENV ASPNETCORE_URLS http://+:5000 
COPY $source .

發布應用

在提升的 PowerShell 中從與 Docker 文件相同的位置運行

dotnet publish

docker build bin\Debug\netcoreapp1.0\publish -t aspidserver

docker run -it  aspidserver cmd

我想運行容器並查看它在 PowerShell 中運行時的輸出。

一旦容器在命令提示符下啟動並在容器中運行,我就啟動了我的應用程序。

dotnet nameOfApplication.dll

如果一切按計划進行,則應該啟動並運行。

您可以在網絡設置設置為host運行 docker 容器。 這樣的容器將與 docker 主機共享網絡堆棧,從容器的角度來看,localhost(或 127.0.0.1)將指代 docker 主機。

docker run --net=host ... 

然后,您應該像從主機一樣從 docker 容器內部獲取 SQL Server 數據庫。

就像在這個答案中一樣

Linux Docker 中的 SQL Server 實例字符串連接

根據微軟的Saurabh Singh 的說法

實例名稱支持在 .Net Core 的 v 1.1 中可用。 在 .Net Core v1.0 中,Windows 以外的操作系統不支持實例名稱。

因此,我認為您無法使用實例名稱從 Linux 上運行的 .Net Core 1.0 連接到 SQL Server。

您的選擇似乎是:

 don't use instance name wait for .Net Core 1.1 (planned for "Fall 2016") use pre-release version of .Net Core 1.1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM