首页 > 解决方案 > Microsoft SDK docker 映像可以构建但不能运行 Web 应用程序

问题描述

我正在尝试创建一个 docker 映像,您可以在其中构建/发布,但也可以运行一个 .net 核心网站,但有一个真正的问题

图片 mcr.microsoft.com/dotnet/sdk:5.0

如果你在一个容器中构建它,它发布没有问题,但是当你运行时你会遇到问题。相比之下,如果你运行

mcr.microsoft.com/dotnet/aspnet:5.0

那么您就不会遇到任何问题,可以正常运行应用程序,但是当然您不能使用该软件包仅作为其运行时发布或构建。

我已经完成了一个使用相同源代码和 dockerfile 运行 .net 核心 Web 应用程序的实验,除了一个使用 sdk 和一个使用 aspnet。两个 dockerfile 都使用之前生成的发布文件夹中的预构建 dll 构建图像。他们看起来像这样..

码头文件 1

FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
#copy dlls from publish into working directory
COPY /publish .
ENTRYPOINT ["dotnet", "/app/Whipover.dll"]

码头文件 2

FROM mcr.microsoft.com/dotnet/sdk:5.0
WORKDIR /app
#copy dlls from publish into working directory
COPY /publish .
ENTRYPOINT ["dotnet", "/app/Whipover.dll"]

Docker 文件 1 映像运行网站没有问题,Docker 文件 2 映像给出错误..“无法在 IPv6 环回接口上绑定到 http://localhost:5000:'无法分配请求的地址'。”

我们知道这是为什么吗?我认为 sdk 映像应该能够完成 aspnet 映像可以做的所有事情。至于错误,我可以修改 docker file 2 以包含

#ENV ASPNETCORE_URLS=http://+:80
#EXPOSE 80 5000

.. 运行网站,但无法检索 wwwroot.. 的内容,这将是另一个问题。另外,当 dockerfile 1 完全没有问题时,我不明白为什么我需要手动公开端口?

谢谢

标签: dockerasp.net-coredockerfile

解决方案


解决方案是拥有一个多部分 dockerfile,您可以在其中使用 sdk 构建,然后使用运行时不同的映像运行。

我的印象是 sdk 可以两者兼得。

我正在查看关于复数视觉的过时课程。这是使用的最佳参考是 https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/docker/building-net-docker-images?view=aspnetcore-5.0


推荐阅读