首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多个asp.net核心项目在docker中有问题

多个asp.net核心项目在docker中有问题
EN

Stack Overflow用户
提问于 2020-05-12 14:24:22
回答 2查看 52关注 0票数 0

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

代码语言:javascript
运行
复制
#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中构建它?

EN

回答 2

Stack Overflow用户

发布于 2020-05-12 21:23:57

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

代码语言:javascript
运行
复制
<PropertyGroup>
   <TargetFramework>netcoreapp3.1</TargetFramework>
   <DockerfileContext>..\</DockerfileContext>
</PropertyGroup>

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

代码语言:javascript
运行
复制
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文件中为应该构建的每个项目指定构建上下文。

票数 0
EN

Stack Overflow用户

发布于 2020-05-12 22:42:27

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

这是我的项目中的一个例子,希望能有所帮助。

代码语言:javascript
运行
复制
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"]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61745139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档