【问题标题】:multiple asp.net core project have problems in docker多个asp.net核心项目在docker中有问题
【发布时间】:2020-08-27 21:43:37
【问题描述】:

我使用 Visual Studio 2019 并用它创建了我的 dockerfile。 我的码头文件

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

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 ["BackEnd.service.api.csproj", "BackEnd.service.api"]
COPY ["src/BackEnd.Service.Application/BackEnd.Service.Application.csproj", "src/BackEnd.Service.Application/"]
COPY ["src/BackEnd.Service.Model/BackEnd.Service.Model.csproj", "src/BackEnd.Service.Model/"]
RUN dotnet restore "src/BackEnd.service.api/BackEnd.service.api.csproj"
COPY . .
WORKDIR "/src/src/BackEnd.service.api"
RUN dotnet build "BackEnd.service.api.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "BackEnd.service.api.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "BackEnd.service.api.dll"]

还有我的项目树:

现在我有这个错误:

请帮助我如何更改我的项目路线以在 docker 中构建它?

【问题讨论】:

  • 您也想使用 Visual Studio 进行调试吗?因为据我了解the docs,在我看来,您的项目结构可能不适用于快速模式。
  • @mu88 我在 Visual Studio 中遇到问题。因为我的 Windows 是 8.1 单一语言,我无法设置本地组
  • 您可以选择更改解决方案结构吗?因为我怀疑src 文件夹可能是VS 的问题。如果你愿意,我可以给你举个例子
  • @mu88 我改了,但是我的 vs 有问题 CTC1010

标签: c# .net docker asp.net-core .net-core


【解决方案1】:

问题很可能是您的构建上下文。 Visual Studio 似乎将您的 Web 应用项目用作构建上下文,这意味着它无法从 src 文件夹访问您的应用程序和模型项目。 我可以建议您尝试在 Web 应用程序的 .csproj 文件中将 Dockerfile 上下文显式设置为可访问所有项目的 src 目录:

<PropertyGroup>
   <TargetFramework>netcoreapp3.1</TargetFramework>
   <DockerfileContext>..\</DockerfileContext>
</PropertyGroup>

然后您可能需要更新 Dockerfile 以指向您的参考项目(应用程序和模型),以相对于 src 文件夹。

COPY ["BackEnd.service.api/BackEnd.service.api.csproj", "src/BackEnd.service.api"]
COPY ["BackEnd.Service.Application/BackEnd.Service.Application.csproj", "src/BackEnd.Service.Application/"]
COPY ["BackEnd.Service.Model/BackEnd.Service.Model.csproj", "src/BackEnd.Service.Model/"]
RUN dotnet restore "src/BackEnd.service.api/BackEnd.service.api.csproj"

您可能需要对目录进行一些操作,但记住构建上下文是关键非常重要。

或者,您可以尝试将 docker-compose 项目添加到您的解决方案中,并让该项目构建您的 Dockerfile。您将能够在 docker-compose.yml 文件中为每个应构建的项目指定构建上下文。

【讨论】:

  • 请参阅this link 了解更多可以添加到.csproj 文件中的选项:
【解决方案2】:

我建议按照这篇文章 aspnetcore-app-dockerfiles 手动制作 dockerfile 而不是 vs 项目的 docker 模板。此外,使用.dockerignore 将帮助您简化dockerfile 脚本,忽略文件可能不需要运行时。

这是我项目中的一个示例,希望对您有所帮助。

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

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-bionic AS build
WORKDIR /build
COPY . .

RUN dotnet restore
RUN dotnet publish "src/BackEnd.service.api/BackEnd.service.api.csproj" -c Release -o /app --no-restore

FROM base AS final
WORKDIR /app
COPY --from=build /app .
ENTRYPOINT ["dotnet", "BackEnd.service.api.dll"]

【讨论】:

    猜你喜欢
    • 2021-10-04
    • 2021-07-22
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多