在Windows上的Docker从dotnetcore应用程序连接到SQL服务器

我已经使用asp.net核心构build了一个简单的API,从SQL Server数据库返回一些数据。

它在VS和命令行运行良好,但是当我build立和运行应用程序作为我的Windows 10机器上的docker容器时,我打电话给API我不断收到这个错误

System.Data.SqlClient.SqlException:连接超时过期。 login后阶段过去的超时时间。 在等待服务器完成login过程和响应时,连接可能已经超时; 或者尝试创build多个活动连接时可能已超时。 试图连接到这个服务器的时间是 – [Pre-Login] initialization = 425; 握手= 265; [login]初始化= 5; authentication= 9; [后login]完整= 14034; —> System.ComponentModel.Win32Exception:未知错误258

我真的不知道这是什么告诉我,这就好像它不能findSQL Server的机器。 我不得不在泊坞窗configuration或当我运行的容器了端口1433吗?

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

 sql: ports: - "1337:1433"