ASP.NET核心 – 在Visual Studio 2015中通​​过Docker进行debugging时的问题

我在Visual Studio中使用Docker运行构build在ASP.NET Core上的应用程序时遇到了问题。 我的应用程序只使用dnxcore50框架。 我的project.json文件是:

{ "version": "1.0.0-*", "compilationOptions": { "emitEntryPoint": true }, "dependencies": { "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final", "Microsoft.AspNet.Mvc": "6.0.0-rc1-final", "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final", "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final" }, "frameworks": { "dnxcore50": { } }, "exclude": [ "wwwroot", "node_modules" ], "publishExclude": [ "**.user", "**.vspscc" ], "commands": { "web": "Microsoft.AspNet.Server.Kestrel" } } 

我尝试了以下方法:

  1. 当我的dnvm指向运行时, dnx-coreclr-win-x64.1.0.0-rc1-update1如下图所示。

在这里输入图像说明

我的应用程序成功build立。 但是,我在docker上运行/debugging应用程序时出现以下错误,我的应用程序被卡在“Opening site http://192.168.99.100:5000 ” 在这里输入图像说明

错误详细信息:当前运行时框架与“app”不兼容当前运行时目标框架:“DNX,Version = v4.5.1(dnx451)”请确保运行时匹配project.json中指定的框架

  1. 由于上面的错误信息表明在框架中存在不匹配,我通过修改默认别名并执行命令dnvm use default -p将默认和活动运行时更改为dnx-coreclr-linux-x64.1.0.0-rc1-update1 。 然后,我重新启动我的VS(以确保更改在VS中可见)。

在这里输入图像说明

但是,我的应用程序仍然build立在DNX版本v4.5.1上,如下面的构build日志所build议的那样:

 1> Information: [LoaderContainer]: Load name=Microsoft.Dnx.Tooling 1> Information: [PathBasedAssemblyLoader]: Loaded name=Microsoft.Dnx.Tooling in 2ms 1> Information: [Bootstrapper] Runtime Framework: DNX,Version=v4.5.1 1> Microsoft .NET Development Utility Mono-x64-1.0.0-rc1-16231 

因此,应用程序再次无法运行与点1相同的错误。

此外,在更改默认运行时dnu还原从命令行停止工作,并给出以下错误:

“dnu”不被识别为内部或外部命令,可操作程序或batch file。

有趣的是,'dnu'restore命令继续从VS(如VS构build日志中的build议)工作。

  1. 然后我尝试将dnvm运行时更改为dnx-mono.1.0.0-rc1-update1 。 但是它会失败,并显示以下错误

找不到dnx-mono.1.0.0-rc1-update1.1.0.0-rc1-update1,你需要运行'dnvm install default'吗? 在C:\ Program Files \ Microsoft DNX \ Dnvm \ dnvm.ps1:1659 char:9 + throw“Can not find $ runtimeFullName,do you need to run'$ Com … + ~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~运行timeException + FullyQualifiedErrorId:找不到dnx-mono.1.0.0-rc1-update1.1.0.0-rc1-update1,你需要运行'dnvm install default'吗?

我需要用什么运行时从VS中运行docker,以及如何更改它? 请求您的帮助来解决问题。

更新我终于能够通过将docker文件的第一行更改为FROM microsoft/aspnet:1.0.0-rc1-update1-coreclr来解决该问题FROM microsoft/aspnet:1.0.0-rc1-update1-coreclr FROM microsoft/aspnet:1.0.0-rc1-update1 。 感谢@bertt的提示。

dockerfile的第一行是什么? 对于CoreClr应该是“FROM microsoft / aspnet:1.0.0-rc1-update1-coreclr”

我在这里阅读关于这个在stackoverflow这个类似的post

问题可能是Kestrel默认只监听本地主机。

您可能想要更改您的dockerfile包含:

 ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:5000"] 

或者只是修改你的project.json的最后一部分

  "commands": { "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://0.0.0.0:5000" } 

也可能工作。