Docker容器未加载wwwroot内容Dotnet Core 3.1

gv8xihay  于 2022-11-03  发布在  Docker
关注(0)|答案(2)|浏览(301)

我有一个基于分层的应用程序,包括API,业务,公共,域和基础设施层。API层有一个wwwroot文件夹,其中包括Angular 构建内容。
在启动时,在配置管道的地方,我启用了UseStaticFiles()。

在本地运行时,使用
不带表运行
则应用程序将成功运行。
接下来,我构建docker文件。docker文件被放置在.sln所在的目录中。

下面是docker文件的内容。

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build

# Copy csproj and restore as distinct layers

COPY *.sln /build/
COPY Admin.Core/*.csproj ./build/Admin.Core/
COPY Admin.Business.Common/*.csproj ./build/Admin.Business.Common/
COPY Admin.Infrastructure/*.csproj ./build/Admin.Infrastructure/
COPY Admin.Business/*.csproj ./build/Admin.Business/
COPY Admin.API/*.csproj ./build/Admin.API/

# COPY *.csproj /build/

RUN dotnet restore ./build/Admin.API/Admin.API.csproj

# Copy everything else and build

COPY . ./build/

WORKDIR /build
RUN dotnet publish ./Admin.API/Admin.API.csproj -c Release -o out 

# Build runtime image

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS runtime

WORKDIR /app
COPY --from=build /build/out .

ENTRYPOINT ["dotnet", "Admin.API.dll"]

当我构建一个映像并在容器中运行时,应用程序运行成功,并且我可以使用postman成功调用API。但在浏览器中,wwwroot内容没有加载。该文件夹存在于容器文件中。如何修复此问题?

u0sqgete

u0sqgete1#

这不是Docker问题。这是.NET Core中中间件的不正确用法。
应在路由之前添加静态文件。

app.UseStaticFiles();
    .
    .
    .
    app.UseRouting();

添加中间件的顺序是非常重要的。因为UseRoutingUseStaticFiles之前添加,所以是MVC路由在寻找图像和css文件以匹配MVC规则,当然这是不可用的。因此这些可能找不到。
更改顺序将解决此问题。

p3rjfoxz

p3rjfoxz2#

我在某个地方读到过Docker容器(由Linux支持?)中的路径是区分大小写的。所以将文件/项目名称全部改为小写可以解决这个问题。但是我从来没有测试过这个问题。

相关问题