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

Lea*_*ker 17 c# docker .net-core docker-compose asp.net-core

我的机器上安装了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>
Run Code Online (Sandbox Code Playgroud)

但这没有任何区别.

ben*_*ben 7

假设

  • Microsoft SQL Server 2016
  • Windows 10周年更新
  • Windows容器
  • 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"
},
Run Code Online (Sandbox Code Playgroud)

确保删除Trusted_Connection=True.

创建一个Docker文件

我的示例Docker文件

FROM microsoft/dotnet:nanoserver
ARG source=.
WORKDIR /app 
EXPOSE 5000 
EXPOSE 1433 
ENV ASPNETCORE_URLS http://+:5000 
COPY $source .
Run Code Online (Sandbox Code Playgroud)

发布申请

在提升的PowerShell中从与Docker文件相同的位置运行

dotnet publish

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

docker run -it  aspidserver cmd
Run Code Online (Sandbox Code Playgroud)

我想运行容器并查看在PowerShell中运行的输出.

一旦容器在命令提示符下启动并在容器中运行,我就启动了我的应用程序.

dotnet nameOfApplication.dll
Run Code Online (Sandbox Code Playgroud)

如果一切都按计划进行,那么应该启动并运行.


Cam*_*lva 4

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

docker run --net=host ... 
Run Code Online (Sandbox Code Playgroud)

然后,您应该从 docker 容器内部获取 SQL Server 数据库,就像从主机获取 SQL Server 数据库一样。

  • 我认为他指的是在本地主机上运行的 SQL Server(不是在容器中,只是通过本地主机端口连接到实例)。另外,请参考我之前的回答,WinDocks 为 Windows 操作系统系列提供了一个 Docker 引擎,它支持容器中的 SQL Server(即 SQL Server 2008 到 2016 映像支持)。 (5认同)