【问题标题】:How to run docker image produced by VS 2017如何运行 VS 2017 生成的 docker 镜像
【发布时间】:2017-09-28 05:55:56
【问题描述】:

Docker 新手在这里...

如何在命令行中正确运行由 Visual Studio 2017 生成的 Asp.Net CORE 应用程序的 docker 映像?

docker run -it -d -p 80:32769 myappimage

似乎无法正常工作(图像运行,但我无法浏览到我的应用)

注意:我只是使用默认模板在 Studio 中创建了一个示例 ASP.Net Core Web 应用程序,并添加了 Docker 支持(通过单击“添加 Docker 支持”复选框。)。执行此操作时,Studio 会添加一个 dockerfile 和一些 docker-compose 文件。

当 Visual Studio “运行”图像时(按 F5) - 我可以成功浏览到我的应用程序(通过“http://localhost:32789”或类似的主机端口。容器内的应用程序位于端口 80 上)。但我无法弄清楚在命令行自己运行它的命令。

Studio 添加到您的项目的标准 Dockerfile 是...

FROM microsoft/aspnetcore:1.1
ARG source
WORKDIR /app
EXPOSE 80
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "WebApplication2.dll"]

【问题讨论】:

  • 可能需要向我们提供更多信息。 Dockerfile,它试图做什么,“无法浏览到应用程序”是什么意思,等等......
  • 你的 docker 主机是什么?
  • 您的应用程序是否配置为在端口 80 上运行?使用 ASP.NET Core 模板时默认端口为 5000

标签: docker asp.net-core visual-studio-2017


【解决方案1】:

是的,这是可能的。在 Release 配置中重新构建您的解决方案,并尝试使用 F5 运行 docker-compose 项目,以确保图像已更新并且您的应用程序运行正常。然后执行docker imagesconsole command。你会看到类似的东西:

REPOSITORY   TAG      IMAGE ID       CREATED              SIZE
Your.App     latest   673b79a6bb3d   About a minute ago   294 MB

您只需要从该映像运行一个新容器并将其公开的端口映射到本地主机端口。默认情况下,暴露的端口是80(查看Dockerfile)。例如:

docker run -d -p 1234:80 --name some_name Your.App:latest

那么您的应用应该可以通过http://127.0.0.1:1234/ 访问。

解释:

如果设置了 Debug 配置,则 Visual Studio 会创建 empty 不可用的图像。它手动将空容器映射到文件系统,以使调试、“编辑并继续”功能等成为可能。这就是为什么 dev 没有 Visual Studio 图像就毫无用处的原因。在 Release 配置中构建映像以使其可用。

完整的发布过程在文档中描述:Visual Studio Tools for Docker

发布 Docker 镜像

一旦您完成了您的开发和调试周期 应用程序,Docker 的 Visual Studio 工具将帮助您创建 您的应用程序的生产映像。将调试下拉菜单更改为 发布并构建应用程序。工具将生成图像 使用 :latest 标签,您可以将其推送到您的私人注册表或 Docker 中心。

【讨论】:

  • 非常感谢我几天来一直在寻找这个答案
【解决方案2】:

你在这里混淆了一些东西。在 Visual Studio 2017 中使用 F5 运行项目时,您可以在随机配置的端口上使用 IISExpress 运行它。

在 Docker 中,您没有 IISExpress,您的应用程序仅由 Kestrel 托管(即使在 IIS/IISExpress 之后也始终使用 Kestrel,但它们充当反向代理)。

Kestrel 的默认端口是 5000,但您也可以配置它。请参阅我的帖子here,了解有关您必须配置侦听 ip/端口的方法的更多详细信息。

【讨论】:

  • @Franciscod'Anconia:请花时间正确阅读答案,它没有声明 IISExpress 在 Docker 中运行的任何地方。问题是,如果您追溯添加(ed)docker 支持(至少在编写 iirc 时)(相对于在创建项目时添加复选框),它不会自动成为 F5 启动应用程序,这很明显OP 使用高端口号32789 发布 url。在 docker 中启动时,不会发生这种情况,这清楚地表明 OP 保留了默认的启动/调试设置,即 IISExpress
猜你喜欢
  • 2022-10-15
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多