如何从 Docker-Composed C# 应用程序连接到本地 SQL Server Express 数据库?
How to connect to a local SQL Server Express database from a Docker-Composed C# application?
连接到 Azure 中的 SQL 服务器数据库的原始(工作正常)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”应该是什么?
我尝试了这些选项,但是 none 行得通吗?
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:
我尝试了同样的方法,但没能成功。相反,我也在 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!!
按照这个 blog-post 我可以让它工作。
查看以下步骤:
1]
确保已启用 TCP,并且此 SQLExpress 实例的“Listen All 设置为 Yes”:
2]
定义一个(免费的)固定自定义端口,SQLExpress 实例应该在该端口上监听(例如 49172)
3]
确保 Windows 上的防火墙允许本地连接到此端口:
4]
现在将连接字符串更改为此。
Server=host.docker.internal,49172;Initial Catalog=Initial Catalog=my-catalog;***
在此示例中,使用了 host.docker.internal
,它会自动解析此 Docker 内部 (nat) ip 地址。
在我的例子中是这样的:
(但是如果你只使用host.docker.internal
就不需要使用这个IP地址)
连接到 Azure 中的 SQL 服务器数据库的原始(工作正常)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”应该是什么?
我尝试了这些选项,但是 none 行得通吗?
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:
我尝试了同样的方法,但没能成功。相反,我也在 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!!
按照这个 blog-post 我可以让它工作。
查看以下步骤:
1]
确保已启用 TCP,并且此 SQLExpress 实例的“Listen All 设置为 Yes”:
2]
定义一个(免费的)固定自定义端口,SQLExpress 实例应该在该端口上监听(例如 49172)
3]
确保 Windows 上的防火墙允许本地连接到此端口:
4] 现在将连接字符串更改为此。
Server=host.docker.internal,49172;Initial Catalog=Initial Catalog=my-catalog;***
在此示例中,使用了 host.docker.internal
,它会自动解析此 Docker 内部 (nat) ip 地址。
在我的例子中是这样的:
(但是如果你只使用host.docker.internal
就不需要使用这个IP地址)