我使用asp.net核心构建了一个简单的api,它从sql server数据库返回一些数据。
它在VS和命令行中运行良好,但是当我在我的Windows 10机器上构建并运行应用程序作为docker容器时,我调用api我一直收到此错误
System.Data.SqlClient.SqlException:连接超时已过期。该 在登录后阶段过去了超时时间。连接 在等待服务器完成登录时可能会超时 过程和回应;或者它可能在尝试时超时 创建多个活动连接。持续时间 尝试连接到此服务器是 - [登录前] 初始化= 425;握手= 265; [登录]初始化= 5; 认证= 9; [登录后]完成= 14034; ---> System.ComponentModel.Win32Exception:未知错误258
我不确定这告诉我什么,就好像它找不到sql server机器一样。我是否必须以某种方式在docker配置中或当我运行容器时公开端口1433
?
答案 0 :(得分:4)
正如Tseng在评论中解释的那样,您的容器位于他们自己的网络中,而不是在您的主机网络中。您确实希望公开该端口(或映射到主机上的另一个可用端口),您可以使用Docker Compose轻松完成此操作。在下面的示例中(您在Docker-compose.yml文件中), sql 是数据库容器的名称, 1337 是本地端口, 1433 是容器的端口。
sql:
ports:
- "1337:1433"
答案 1 :(得分:1)