如何运行由VS 2017生成的Docker镜像

15

我是 Docker 的新手...

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

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

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

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

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

Visual Studio添加到您的项目中的标准Dockerfile如下...

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

可能需要给我们提供更多的信息。Dockerfile文件是什么,它试图做什么,'无法浏览应用程序'的意思是什么等等... - johnharris85
你的Docker主机是什么? - user268396
你的应用程序是否配置为在80端口上运行?当使用ASP.NET Core模板时,默认端口为5000。 - Tseng
2个回答

30

是的,这是可能的。使用 Release 配置重建您的解决方案,并尝试使用 F5 运行 docker-compose 项目以确保镜像已更新且应用程序正常工作。然后执行 docker images 控制台命令。您会看到类似如下的内容:

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会创建空的不可用图像。它会手动将空容器映射到文件系统,以使调试、"编辑和继续"功能等成为可能。这就是为什么没有Visual Studio,dev镜像是无用的。使用Release配置构建镜像使其可用。

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

发布Docker镜像

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


3
非常感谢,我已经寻找这个答案好几天了。 - Eskinder

0

你在这里有些混淆了。当你在Visual Studio 2017中使用F5运行项目时,它会在随机配置的端口上使用IISExpress运行。

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

Kestrel的默认端口是5000,但你也可以进行配置。请参阅我的帖子here以获取更多关于如何配置监听IP/端口的详细信息。


@Franciscod'Anconia:请花时间仔细阅读答案,它没有声称IISExpress在Docker中运行。问题是,如果您(至少在我写这篇文章的时候)事后添加了docker支持(而不是在创建项目时添加复选框),它不会自动成为F5启动应用程序,这可以从OP使用高端口号“32789”发布URL的帖子中看出。当在docker中启动时,这种情况不会发生,这清楚地表明OP已经离开了默认的启动/调试设置,即IISExpress。 - Tseng

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