ASP.NET Core - 在 Visual Studio 2015 中通过 Docker 调试时出现问题

5

我在使用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"
  }
}

我尝试了以下几种方法:

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

enter image description here

我的应用程序已成功构建。但是,在docker上运行/调试应用程序时,我遇到以下错误,并且我的应用程序在“打开网站http://192.168.99.100:5000”处卡住了。 enter image description here

错误详情: 当前的运行时框架与'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中可见)。

enter image description here

然而,我的应用程序仍然建立在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

因此,应用程序再次出现与第一点相同的错误而无法运行。
此外,更改默认运行时后,命令行中的dnu restore停止工作,并显示以下错误信息:
“'dnu'不是内部或外部命令,可执行程序或批处理文件。”
有趣的是,“dnu”还可以从VS(在VS构建日志中建议)中继续使用restore命令。
接着我尝试将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个字符: + throw "Cannot find $runtimeFullName, do you need to run '$Com ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (Cannot find dnx...stall default'?:String) [], Run timeException + FullyQualifiedErrorId : Cannot find dnx-mono.1.0.0-rc1-update1.1.0.0-rc1-update1, do you need to run 'dnvm install default'?
我需要使用哪个运行时来从VS运行docker,如何更改它?请求您的帮助解决此问题。
更新:最终我通过将docker文件的第一行更改为FROM microsoft/aspnet:1.0.0-rc1-update1-coreclr FROM microsoft/aspnet:1.0.0-rc1-update1。感谢@bertt的提示,我成功解决了这个问题。

请将所有屏幕截图的内容转录下来,以便可以阅读文本(当它们很小)、可以阅读文本(当它们在诸如联合馈送之类的媒介中时,这些媒介不允许使用图像)、可以阅读文本(当图像链接最终断开时),并且可以进行搜索。 - ErikE
@ErikE将图像详细信息添加为文本 - Ankit Vijay
2个回答

2
你的Dockerfile第一行写了什么? 如果是针对CoreClr,应该写成'FROM microsoft/aspnet:1.0.0-rc1-update1-coreclr'。

Docker文件的第一行是:FROM microsoft/aspnet:1.0.0-rc1-update1。 - Ankit Vijay
@Bret,我用Visual Studio默认生成的Docker文件,但运行时版本不正确。将Docker文件内容更改为“FROM microsoft/aspnet:1.0.0-rc1-update1-coreclr”有助于解决问题。感谢您的帮助。 - Ankit Vijay

1

我在stackoverflow上看到了类似的帖子。

问题可能是Kestrel默认仅侦听localhost。

您可能需要更改包含以下内容的dockerfile:

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

或者,您可以仅修改项目.json的最后一部分为:

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

可能也可以工作。

嗨Bauer,感谢你的帮助。我尝试更改我的dockerfile和project.json,但没有帮助。:( - Ankit Vijay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接