在Visual Studio中使用Docker运行构建在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"
}
}
我尝试了以下方法:
- 当我的dnvm指向运行时 dnx-coreclr-win-x64.1.0.0-rc1-update1 时,如下图所示 .
我的应用程序成功构建但是,我在docker上运行/调试应用程序时出现以下错误,我的应用程序卡在“打开网站http://192.168.99.100:5000”
Error details: 当前运行时框架与'app'不兼容当前运行时目标框架:'DNX,Version=v4.5.1 (dnx451)'请确保运行时与project.json中指定的框架匹配
- 由于上面的错误消息表明框架中存在不匹配,我通过修改默认别名和执行命令
dnvm use default -p
将默认和活动运行时更改为 dnx-coreclr-linux-x64.1.0.0-rc1-update1 . 然后,我重启我的VS(以确保在VS中可以看到更改) .
但是,我的应用程序仍然 Build 在DNX版本v4.5.1上,如下面的构建日志中所示:
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'不被识别为内部或外部命令,可操作程序或批处理文件 .
有趣的是,'dnu'restore命令继续在VS中运行(如VS构建日志中所示) .
- 然后我尝试将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“找不到$ runtimeFullName,你需要运行'$ Com ... ~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :OperationStopped :(找不到dnx ... stall default'?:String)[],运行timeException FullyQualifiedErrorId:找不到dnx-mono.1.0.0-rc1-update1.1.0.0-rc1-update1,你知道吗运行'dnvm install default'?
我需要使用什么运行时从VS运行docker以及如何更改它?请求您的帮助以解决问题 .
Update 我终于能够通过将docker文件的第一行更改为 FROM microsoft/aspnet:1.0.0-rc1-update1-coreclr
FROM microsoft/aspnet:1.0.0-rc1-update1
来解决此问题 . 谢谢@bertt的提示 .
2 回答
你的dockerfile的第一行是什么?对于CoreClr,应该是'FROM microsoft / aspnet:1.0.0-rc1-update1-coreclr'
我在stackoverflow上的类似文章中读到过这个
问题可能是Kestrel默认只侦听localhost .
您可能想要更改包含以下内容的dockerfile:
或者只是修改project.json的最后一部分
也可能有用 .