从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
- .Net Core Clrdebugging器VSDBG在Windows Docker容器中连接到远程进程时暂停应用程序
- 在从docker运行时连接到.netcore 1.1 web api中的mysql时出错
- 在Docker中运行.Net Core 2.0上的IdentityServer4 – 访问主机资源
- 如何在Linux Docker容器中从networking共享中恢复nuget包
- 什么会阻止在Docker容器中运行的代码连接到单独的服务器上的数据库?
- 在Azure中的Docker中,一个带有swagger的asp.net核心Web API不起作用
- 无论使用ITicketStore还是IDistributedCache,重新启动服务器时,身份validationCookie都会停止工作
- 如何检查在PS1中dotnet恢复是否正常?
- docker集装箱挂时运行dotnet新