Docker&x2B;连接到主机(localdb)

Docker&x2B;连接到主机(localdb),docker,localdb,Docker,Localdb,是否可以从容器实例连接到SQL Server Express(localdb) docker编写示例连接字符串: fooapi: 图片:fooapi 环境: -ASPNETCORE_环境=开发 -ConnectionString:DefaultConnection=Server=host.docker.internal\\mssqllocaldb;数据库=FooDB;MultipleActiveResultSets=true;用户Id=foo;密码=您的密码123; 建造: 上下文:../ms

是否可以从容器实例连接到SQL Server Express(localdb)

docker编写示例连接字符串:

fooapi:
图片:fooapi
环境:
-ASPNETCORE_环境=开发
-ConnectionString:DefaultConnection=Server=host.docker.internal\\mssqllocaldb;数据库=FooDB;MultipleActiveResultSets=true;用户Id=foo;密码=您的密码123;
建造:
上下文:../ms foo/src/
dockerfile:dockerfile
端口:
- "6004:6004"
使用此配置运行app@localhost很好:

“连接字符串”:{
“DefaultConnection”:“服务器=(localdb)\\mssqllocaldb;数据库=FooDB;MultipleActiveResultSets=true;用户Id=foo;密码=Your_password123;”
},
是否缺少某些dns解析,或者是否需要以某种方式共享实例

?

更新

包括错误消息

{ “错误”:“14不可用:建立与SQL Server的连接时发生与网络相关或特定于实例的错误。找不到或无法访问该服务器。请验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。(提供程序:SQL网络接口,错误:25-连接字符串无效)“}


您可以访问容器网络网关上的父主机

假设您的容器地址是
172.21.0.2
。在这种情况下,您很可能会在
172.21.0.1
(以及相应的侦听端口)找到SQL server

要找到容器的IP,您可以尝试跳入容器并打印其网络配置,即
docker exec IP a
,但通常
IP
ifconfig
命令未安装,因此我建议查看
docker inspect
的底部。按键
IPAddress
Gateway
保留讨论教育价值观


然后,您可以使用自定义的
/etc/hosts
构建容器,或者将其指向可以解决此问题的DNS服务器,这样您就可以使用好的名称而不是IP地址。

我认为您的错误与docker compose文件中定义的环境变量有关,第二个变量必须如下所示:

variable\u name=“value2”
因此,您的案例必须是这样的:


DB\u CONNECTION\u STRING=“ConnectionStrings:DefaultConnection”
DB\u SERVER=“host.docker.internal\\mssqllocaldb”
DB_NAME=“FooDB”
DB_MultipleActiveResultSets=true
DB\u USER\u ID=“foo”
DB_PASSWORD=“您的密码123”
之后,您可以使用此环境变量定义连接:

“连接字符串”:{
“DefaultConnection”:“服务器=(localdb)\\mssqllocaldb;数据库=FooDB;MultipleActiveResultSets=true;用户Id=foo;密码=Your_password123;”
},

我希望这能帮助您解决您的问题。

好吧,我用
host.docker.internal
指向主机。我不确定
host.docker.internal
是否是一个有效/可解析的主机名,至少对于Linux容器来说是这样,但您可以跳入容器并使用它来尝试,看看它是否解析->
docker exec-itsh
并从那里开始。它工作正常,在连接到主机上的API时在多个场景中使用。有趣。我想我可能遗漏了一些细节,然后,对我来说,在alpine或debian容器上,我得到了
host.docker.internal:名称或服务未知
。使用网关时,你会遇到同样的错误吗?(如果您不使用专用网络,那么默认网关IP很可能是
172.17.0.1
fooapi
的错误是什么?是否超时?