Docker&x2B;连接到主机(localdb)
是否可以从容器实例连接到SQL Server Express(localdb) docker编写示例连接字符串: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
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
的错误是什么?是否超时?