gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 19:49:32 25 4
gpt4 key购买 nike

当我启动我的容器时,页面启动时没有样式、脚本、图像和其他静态文件 - 加载它们的调用返回 404。

我想说的是,当我访问app文件夹时,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"]

wwwroot exists

应用程序运行,但有很多错误:

Errors

有人可以帮助我吗?

最佳答案

您必须运行 dotnet publish 命令,以便将所有必需的文件复制到您的应用程序文件夹中。

您的发布文件夹只有应用程序的 dll 文件,因此当您将其复制到 docker 容器时,wwwroot 文件不会被复制。

如果您创建一个新的网络应用程序项目并勾选 Docker 支持选项,它将为您创建一个 dockerfile。创建一个示例项目,以便您可以查看将应用程序容器化的推荐方法。

这是一个使用发布命令的例子:

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"]

关于c# - 在 Docker 上运行 Asp Core MVC - 静态文件/wwwroot 文件未加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61787101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com