Windows上的Docker从dotnetcore应用程序连接到sql server

bea*_*oft 10 docker asp.net-core

我使用asp.net核心构建了一个简单的api,它从sql server数据库返回一些数据.

它在VS和命令行中运行良好,但当我在我的Windows 10机器上构建并运行应用程序作为docker容器时,我调用api我一直收到此错误

System.Data.SqlClient.SqlException:连接超时已过期.在登录后阶段过去了超时时间.在等待服务器完成登录过程并响应时,连接可能已超时; 或者在尝试创建多个活动连接时可能会超时.尝试连接到此服务器所花费的时间是 - [Pre-Login] initialization = 425; 握手= 265; [登录]初始化= 5; 认证= 9; [登录后]完成= 14034; ---> System.ComponentModel.Win32Exception:未知错误258

我不太确定这告诉我什么,就好像它找不到sql server机器一样.我是否必须以1433某种方式在docker配置中或在我运行容器时暴露端口?

otr*_*ers 4

正如 Tseng 在评论中解释的那样,您的容器位于它们自己的网络中,而不是位于主机的网络中。您确实需要公开该端口(或映射到主机上的另一个可用端口),这可以使用 Docker Compose 轻松完成。在下面的示例中(但在 docker-compose.yml 文件中),sql是数据库容器的名称,1337是本地端口,1433是容器的端口。

sql:
 ports:
 - "1337:1433"
Run Code Online (Sandbox Code Playgroud)