【问题标题】:ASP.NET Core - Issues while Debugging through Docker in Visual Studio 2015ASP.NET Core - 在 Visual Studio 2015 中通过 Docker 进行调试时出现的问题
【发布时间】:2016-07-18 01:25:03
【问题描述】:

我在 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如下图所示。

我的应用程序构建成功。但是,我在 docker 上运行/调试应用程序时出现以下错误,并且我的应用程序卡在“打开站点http://192.168.99.100:5000

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

  1. 由于上述错误消息表明框架不匹配,我通过修改默认别名和执行命令dnvm use default -p。然后,我重新启动我的 VS(以确保更改在 VS 中可见)。

但是,我的应用程序仍然在 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 restore 停止从命令行工作并给出以下错误:

'dnu' 不是内部或外部命令,可操作 程序或批处理文件。

有趣的是,“dnu”恢复命令继续在 VS 中工作(如 VS 构建日志中所建议的那样)。

  1. 然后我尝试将 dnvm 运行时更改为 dnx-mono.1.0.0-rc1-update1。但它失败并出现以下错误:

找不到dnx-mono.1.0.0-rc1-update1.1.0.0-rc1-update1,需要吗 运行 'dnvm 安装 默认'? 在 C:\Program Files\Microsoft DNX\Dnvm\dnvm.ps1:1659 char:9 + throw "找不到$runtimeFullName,你需要运行'$Com ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~ + CategoryInfo : OperationStopped: (找不到 dnx...stall default'?:String) [], 运行 时间异常 + FullyQualifiedErrorId : 找不到 dnx-mono.1.0.0-rc1-update1.1.0.0-rc1-update1,你需要吗 d 运行'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 将图像细节添加为文本

标签: c# asp.net docker visual-studio-2015 asp.net-core


【解决方案1】:

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

【讨论】:

  • docker文件第一行是:FROM microsoft/aspnet:1.0.0-rc1-update1
  • @Bret,我有默认从 Visual Studio 生成的 docker 文件。哪个有错误的运行时版本。将 docker 文件内容更改为“FROM microsoft/aspnet:1.0.0-rc1-update1-coreclr”有助于解决问题。感谢您的帮助。
【解决方案2】:

我在stackoverflow 上的类似帖子中读到了这一点

问题可能是Kestrel默认只监听localhost。

您可能想要更改包含以下内容的 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"
  }

也许也可以。

【讨论】:

  • 您好鲍尔,感谢您的帮助。我试图改变我的 dockerfile 和 project.json 但它没有帮助。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-10
  • 2020-11-29
  • 2017-07-09
  • 2018-06-10
  • 2017-05-04
  • 2017-11-25
相关资源
最近更新 更多