我在vs2017中从.net核心项目创建了一个映像,并从中创建并运行了一个容器(通过Docker)。
当我从VS2017调试它并请求此URL时,该项目运行正常:
网址(已调试的项目):https://localhost:44363/api/Movies/getM
它返回我期望的正确响应。
但是当我从启动/正在运行的容器中调用URL时,它将返回此错误:
网址(容器):http://localhost:8080/api/Movies/getM
如何解决?任何帮助将不胜感激。
这是getM的操作方法:
[HttpGet]
[Route("api/Movies/getM")] // stdid,sourseid
public dynamic getdataJoin3Table(/*int id*/)
{
ResponseModel _objResponseModel = new ResponseModel();
_objResponseModel.Info = "res";
_objResponseModel.ResponseStatus = true;
_objResponseModel.ResponseMessage = "Data Received successfully";
return _objResponseModel;
}
docker容器日志:
答案 0 :(得分:2)
根据您提供的信息,似乎您正在尝试连接到位于主机系统上的本地数据库。当您从Visual Studio运行它时,它可以找到本地数据库并连接到它。但是,当您在docker容器中运行您的应用程序时,本地主机将成为docker实例,因此它无法连接到数据库,因为它不在同一docker容器中运行。
有许多方法可以解决此问题。首先-您可以在另一个Docker容器中运行数据库,并使用Docker Compose将app
和db
容器链接在一起。另一种方法是通过为docker容器设置环境变量来设置数据库的连接字符串。该连接字符串应指向主机的数据库。另一个选择是使用一些可以从主机实例和Docker实例访问的外部数据库。