我使用Visual Studio 2019并用它创建了我的dockerfile。 我的Docker文件
#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中构建它?
答案 0 :(得分:0)
问题很可能是您的构建环境。 Visual Studio似乎将您的Web应用程序项目用作构建上下文,这意味着它无法从src
文件夹访问您的Application和Model项目。
我可以建议您尝试将具有以下属性的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
文件中为每个应该构建的项目指定构建上下文。
答案 1 :(得分:0)
我建议按照本文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"]