在Docker上运行Asp Core MVC-未加载静态文件/ wwwroot文件

qgelzfjb  于 2022-11-02  发布在  Docker
关注(0)|答案(2)|浏览(352)

当我启动我的容器时,页面启动时没有样式、脚本、图像和其他静态文件--加载它们的调用返回404。
我想说的是,当我访问应用程序文件夹时,wwwroot文件夹是存在的。
我在我的Release文件夹中测试了它(用dotnet命令)。但是在Docker中它不起作用。是的,我在我的Startup类中使用了UseStaticFiles
我的Dockerfile很简单,它只是运行应用程序。但我以前构建并发布了应用程序,wwwroot就在那里。

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
EXPOSE 80
EXPOSE 443

COPY bin/Release app/

ENTRYPOINT ["dotnet", "app/MyApp.SGC.Site.dll"]

应用程序运行,但出现许多错误:

有人能帮帮我吗?

1dkrff03

1dkrff031#

您必须运行dotnet publish命令,以便将所有必需的文件复制到您的应用程序文件夹中。
您的发布文件夹中只有应用程序的dll文件,因此当您将其复制到Docker容器中时,不会复制wwwroot文件。
如果您创建一个新的Web应用项目并勾选Docker支持选项,它将为您创建一个Docker文件。创建一个示例项目,以便您可以查看容器化应用程序的推荐方法。
以下是使用发布命令的示例:

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["MyApp.SGC.Site/MyApp.SGC.Site.csproj", "MyApp.SGC.Site/"]
RUN dotnet restore "MyApp.SGC.Site/MyApp.SGC.Site.csproj"
COPY . .
WORKDIR "/src/MyApp.SGC.Site"
RUN dotnet build "MyApp.SGC.Site.csproj" -c Release -o /app/build

FROM build AS publish

# publish will copy wwwroot files as well

RUN dotnet publish "MyApp.SGC.Site.csproj" -c Release -o /app/publish
WORKDIR /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyApp.SGC.Site.dll"]
n1bvdmb6

n1bvdmb62#

对于使用Docker的人,您确信容器包含您的静态文件,但仍然得到404。
如果您有WORKDIR指令,请检查您的Dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app # this line
ENV ASPNETCORE_URLS=http://+:5000
COPY --from=build /app/out .
ENTRYPOINT ["dotnet", "YourApp.dll"]

然后,在Program.cs(或Startup.cs)中,确保根路径以“/app”开头:

builder.Services.AddSpaStaticFiles(config => config.RootPath = "/app/wwwroot");

相关问题