c# - 在 Docker 上运行 Asp Core MVC - 未加载静态文件/wwwroot 文件
问题描述
当我启动容器时,页面开始时没有样式、脚本、图像和其他静态文件 - 调用加载它们返回 404。
我想说的是,当我访问app文件夹时,wwwroot文件夹是存在的。
我在我的 Release 文件夹中测试了它(使用 dotnet 命令)。但在 Docker 中它不起作用。是的,我UseStaticFiles
在我的 Startup 课程中使用。
我的 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"]
应用程序运行,但有很多错误:
有人能帮我吗?
解决方案
您必须运行该dotnet publish
命令,以便将所有必需的文件复制到您的应用程序文件夹中。
您的发布文件夹仅包含应用程序的 dll 文件,因此当您将其复制到 docker 容器中时wwwroot
,不会复制文件。
如果您创建一个新的 Web 应用程序项目并勾选 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"]
推荐阅读
- php - 使用 jquery 排序的照片排序,无法正常工作
- javascript - 无法使用 execCommand 在 IE11 div contentEditable 中删除或插入文本
- google-sheets - 需要谷歌查询只显示大于单元格值的项目总和,另一个查询根据选择对值求和
- java - 在单线程上运行的弹簧执行器
- javascript - D3.js 和弦图 - 使和弦接触拉开的弧线
- python - Celery、flask 和 Docker - 日志和运行任务的问题
- java - java中的访问修饰符与示例?
- c - 在 C 中:如何打印函数参数
- c++ - 用于快速求解线性系统的 C++ Eigen
- swift - 可以在 Swift 中将 userdefaults plist 导出为电子邮件附件吗?