我有一个基于分层的应用程序,包括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内容没有加载。该文件夹存在于容器文件中。如何修复此问题?
2条答案
按热度按时间u0sqgete1#
这不是Docker问题。这是.NET Core中中间件的不正确用法。
应在路由之前添加静态文件。
添加中间件的顺序是非常重要的。因为
UseRouting
在UseStaticFiles
之前添加,所以是MVC路由在寻找图像和css文件以匹配MVC规则,当然这是不可用的。因此这些可能找不到。更改顺序将解决此问题。
p3rjfoxz2#
我在某个地方读到过Docker容器(由Linux支持?)中的路径是区分大小写的。所以将文件/项目名称全部改为小写可以解决这个问题。但是我从来没有测试过这个问题。