从Docker容器连接到SQL Server数据库

我有我的机器上安装的窗口泊坞窗。 有一个控制台应用程序以.net core 1.0.0为目标,试图访问运行在不同虚拟机上的SQL Server数据库。 我可以从我的机器上ping运行SQL Server的VM。

当我尝试从我的机​​器上的命令提示符dotnet run使用dotnet run控制台应用程序它工作正常。 但是当相同的应用程序在Docker容器中运行时,我收到一条消息

与SQL Serverbuild立连接时发生networking相关或特定于实例的错误。 服务器未find或无法访问。 validation实例名称是否正确,并将SQL Serverconfiguration为允许远程连接。 (提供程序:TCP提供程序,错误:40 – 无法打开到SQL Server的连接)

我试过使用

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

但这没有什么区别。

假设

  • Microsoft SQL Server 2016
  • Windows 10周年更新
  • Windows容器
  • ASP.NET核心应用程序

将SQL用户添加到您的SQL数据库。

  • 在MS SQL中展开数据库
  • 右键单击“安全/login”
  • select“新login”
  • 创build一个用户名和密码。
  • 分配一个'服务器angular色'…我使用sysadmin,因为我只是testing
  • 在“用户映射”下,我将新用户添加到我的数据库,并使用“dbo”作为模式。

更改SQL身份validation以允许SQL Server身份validation模式

右键单击数据库,select“属性/安全/服务器身份validation/ SQL Server和Windows身份validation模式”单选button。 重新启动MS SQL服务。

用新的用户名和密码更新你的appsettings.json

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

确保删除了Trusted_Connection=True

创build一个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

如果一切顺利,一个人应该开始运转。

您可以运行networking设置为host的docker工具容器。 这样的容器将与docker主机共享networking堆栈,并且从容器的angular度来看,localhost(或127.0.0.1)将引用docker主机。

 docker run --net=host ... 

然后,您应该像从主机那样从Docker容器中获取SQL Server数据库。

在这个答案

Linux Docker中的SQL Server实例string连接

微软的Saurabh Singh表示 :

实例名称支持在.Net Core的1.1版本中提供。 .Net Core v1.0中,实例名称在Windows以外的操作系统上不受支持。

所以我不认为你可以从运行在Linux上的.Net Core 1.0连接到使用实例名称的SQL Server。

你的select似乎是:

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