【问题标题】:Run Asp Core MVC on Docker - the static files / wwwroot files are not loading在 Docker 上运行 Asp Core MVC - 未加载静态文件/wwwroot 文件
【发布时间】:2020-05-14 00:18:54
【问题描述】:

当我启动容器时,页面在没有样式、脚本、图像和其他静态文件的情况下启动 - 加载它们的调用返回 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"]

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

有人可以帮我吗?

【问题讨论】:

    标签: c# docker .net-core dockerfile


    【解决方案1】:

    您必须运行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"]
    

    【讨论】:

    • 首先,感谢您的回答,但我的发布文件夹有 wwwroot。并且容器 bash 中的 wwwroot 就在那里。
    • 我尝试使用 dockerfile 中的默认命令,但它给了我一个错误。
    • 我创建了一个带有 docker 支持的简单项目“TestandoDocker”。它在第 5/17 步给了我错误:FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build ---> cc3d07a86ecd 第 6/17 步:WORKDIR /src ---> 在 4f1b3f2d59c7 中运行删除中间容器 4f1b3f2d59c7 ---> 42df2e9d8cdd 步骤 7/17:复制 [“TestandoDocker/TestandoDocker.csproj”,“TestandoDocker/”] 复制失败:stat /var/lib/docker/tmp/docker-builder961121729/TestandoDocker/TestandoDocker.csproj:没有这样的文件或目录
    • 您可以尝试在 Visual Studio 中右键单击 Dockerfile 并选择“构建 Docker 映像”
    • 有趣。为什么 docker build -t testandodocker 。 ((在我的 dockerfile 的同一文件夹内))在 STEP 7(以上)和 docker build -f 上失败。 "c:\users\MYUSER\source\repos\testandodocker\testandodocker\dockerfile" --force-rm -t testandodocker --label "com.microsoft.created-by=visual-studio" --label "com.microsoft. visual-studio.project-name=TestandoDocker" 工作?
    猜你喜欢
    • 1970-01-01
    • 2021-04-24
    • 2016-08-15
    • 2019-10-03
    • 2021-05-28
    • 2017-05-08
    • 2019-05-30
    • 2018-03-08
    • 2019-08-31
    相关资源
    最近更新 更多