我的机器上安装了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>
但这没有任何区别。
答案 0 :(得分:6)
右键单击您的数据库,选择&#39;属性/安全性/服务器身份验证/ SQL Server和Windows身份验证模式&#39;单选按钮。重新启动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
如果一切按计划进行,那么应该启动并运行。
答案 1 :(得分:2)
您可以运行网络设置为host
的泊坞广告容器。这样的容器将与docker主机共享网络堆栈,从容器的角度来看,localhost(或127.0.0.1)将引用docker主机。
docker run --net=host ...
然后,您应该像在主机上一样从Docker容器中获取SQL Server数据库。
答案 2 :(得分:0)
如同这个答案
SQL Server instance string connection in Linux Docker
来自Microsoft的.Net Core的v 1.1中提供了实例名称支持。在v1.0中 除.Net之外,OS不支持实例名称 视窗。
所以我认为您不能使用实例名从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