如何从 Docker-Compose C# 应用程序连接到本地 SQL Server Express 数据库?

Posted

技术标签:

【中文标题】如何从 Docker-Compose C# 应用程序连接到本地 SQL Server Express 数据库?【英文标题】:How to connect to a local SQL Server Express database from a Docker-Composed C# application? 【发布时间】:2021-02-15 14:59:57 【问题描述】:

连接到 Azure 中的 SQL Server 数据库的原始(工作正常)docker 文件如下所示:

version: '3.4'

services:
  my.service:
    build:
        dockerfile: Test/Test/Dockerfile
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - MyDatabase__ConnectionString=Server=tcp:xxx.windows.net,1433;Initial Catalog=my-catalog;User ID=SA@dbs;Password='xxx';Persist Security Info=False;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30

如果我想连接到本地 SQL Server Express,“MyDatabase__ConnectionString”应该是什么?

我尝试了这些选项,但都不行?

tcp:host.docker.internal\\SQLEXPRESS,1433;*** tcp:host.docker.internal\\SQLEXPRESS;*** tcp:localhost\\SQLEXPRESS,1433;*** host.docker.internal\\SQLEXPRESS,1433;*** host.docker.internal\\SQLEXPRESS;*** localhost\\SQLEXPRESS;***

另请注意,我的本地 SQL Server Express 启用了 TCP:

【问题讨论】:

离开\SQLEXPRESS? 【参考方案1】:

通过关注这个blog-post 我可以让它工作。

请参阅以下步骤:

1] 确保 TCP 已启用,并且此 SQLExpress 实例的“Listen All is set to Yes”:

2] 定义一个(免费的)固定自定义端口,SQLExpress 实例应在其上侦听(例如 49172)

3] 确保 Windows 上的防火墙允许本地连接到此端口:

4] 现在将连接字符串更改为此。

Server=host.docker.internal,49172;Initial Catalog=Initial Catalog=my-catalog;***

在此示例中,使用了host.docker.internal,它会自动将此解析为 Docker 内部 (nat) ip-address。 就我而言,这是这样的:

(不过,如果你只使用host.docker.internal,则不需要使用这个IP地址)

【讨论】:

【参考方案2】:

我尝试了同样的方法,但没有成功。相反,我也在 docker 中运行 sqlserver。然后你可以:

从另一个 docker 容器连接到 sqlserver: Server=host.docker.internal,1434;Database=UsersDb;User ID=sa;Password=P@ssw0rd12345!! 从主机连接 Server=127.0.0.1,1434;Database=UsersDb;User ID=sa;Password=P@ssw0rd12345!!

【讨论】:

以上是关于如何从 Docker-Compose C# 应用程序连接到本地 SQL Server Express 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 ODBC 驱动程序从 C# 调用 Progress Openedge .p 文件?

有啥方法可以从 Windows 10 中的 c# 桌面应用程序使用蓝牙 LE?

WinForms C#中自定义对象类型的跨进程拖放

当进程可以来来去去时,如何在 C# 中进行进程间通信?

如何更好地在 c# (asp.net) 和 SQL Server 上保存和加载图片?

1.5万字长文:从 C# 入门 Kafka