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

Ste*_*ath 5 connection-string sql-server-express docker docker-compose

连接到 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
Run Code Online (Sandbox Code Playgroud)

如果我想连接到本地 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:

TCP 已启用

Ste*_*ath 7

通过关注这篇博文,我可以让它工作。

请参阅以下步骤:

1] 确保已启用 TCP,并且此 SQLExpress 实例的 “全部监听”设置为“是”:在此输入图像描述

2] 定义一个(免费)固定自定义端口,SQLExpress 实例应在该端口上侦听(例如 49172) 在此输入图像描述

3] 确保Windows上的防火墙允许到此端口的本地连接: 在此输入图像描述

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

Server=host.docker.internal,49172;Initial Catalog=Initial Catalog=my-catalog;***
Run Code Online (Sandbox Code Playgroud)

在此示例中host.docker.internal,使用了 ,它会自动解析 Docker 内部 (nat) IP 地址。就我而言,是这样的: 在此输入图像描述

(但是,如果您只使用 ,则不需要使用此 IP 地址host.docker.internal