[英]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 和 Windows 身份驗證模式”單選按鈕。 重新啟動 MS SQL 服務。
示例
"ConnectionStrings": {
"DefaultConnection": "Server=YourServerName;Database=YourDatabaseName;MultipleActiveResultSets=true;User Id=UserNameYouJustAdded;Password=PassordYouJustCreated"
},
確保刪除Trusted_Connection=True
。
我的示例 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 實例字符串連接
實例名稱支持在 .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.