首页 > 解决方案 > Net Core MVC Dockeri 文件不起作用。我的本地项目没有错误

问题描述

我有在分层架构中运行的 net core mvc 项目。它在本地运行良好,但不适用于 docker

FROM mcr.microsoft.com/dotnet/sdk:5.0 as build
WORKDIR /app
COPY ./MyBlog.Shared/MyBlog.Shared.csproj ./MyBlog.Shared/
COPY ./MyBlog.Data/MyBlog.Data.csproj ./MyBlog.Data/
COPY ./MyBlog.Services/MyBlog.Services.csproj ./MyBlog.Services/
COPY ./MyBlog.Entities/MyBlog.Entities.csproj ./MyBlog.Entities/
COPY ./MyBlog.Mvc/MyBlog.Mvc.csproj ./MyBlog.Mvc/
COPY MyBlog.sln .
RUN dotnet restore
COPY . .
RUN dotnet publish ./MyBlog.Mvc/MyBlog.Mvc.csproj -o /publish/
FROM mcr.microsoft.com/dotnet/aspnet:5.0
WORKDIR /app
COPY --from=build /publish .
ENV ASPNETCORE_URLS="http://*:5000"
ENTRYPOINT ["dotnet","MyBlog.Mvc.dll" ]

图层图像

Dockerfile 调试镜像

Dockerfile 输出图像

错误图像

标签: dockerasp.net-coren-layer

解决方案


如您所见,该应用程序localhost仅收听。您需要设置一个环境变量来告诉 ASP.NET Core 侦听所有接口,而不是只侦听localhost无法访问的接口。

ASPNETCORE_URLS="https://+;http://+"

您有一个ENV ASPNETCORE_URLS="http://*:5000"命令,但它似乎没有生效,请尝试将其指定为参数:

docker run 
  --rm -it 
  -p 8000:80 
  -p 8001:443 
  -e ASPNETCORE_URLS="https://+;http://+" 
  -e ASPNETCORE_HTTPS_PORT=8001 
  -e ASPNETCORE_Kestrel__Certificates__Default__Password="password" 
  -e ASPNETCORE_Kestrel__Certificates__Default__Path=\https\aspnetapp.pfx 
  -v %USERPROFILE%\.aspnet\https:C:\https\ 
  mcr.microsoft.com/dotnet/core/samples:aspnetapp

请参阅 Microsoft 的文档,了解如何对 ASP.NET Core 应用程序进行 dockerize。


推荐阅读