我使用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中构建它?
发布于 2020-05-12 13:23:57
问题很可能是您的构建环境造成的。Visual Studio似乎使用您的web应用程序项目作为构建上下文,这意味着它无法从src
文件夹访问您的应用程序和模型项目。我建议您尝试使用以下属性将web应用程序的.csproj
文件中的Dockerfile上下文显式设置为src
目录,所有项目都可以从该目录访问:
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<DockerfileContext>..\</DockerfileContext>
</PropertyGroup>
然后,您可能需要更新您的folder文件,以指向您的参考项目(应用程序和模型),使其相对于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
文件中为应该构建的每个项目指定构建上下文。
发布于 2020-05-12 14:42:27
我建议遵循这篇文章的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"]
https://stackoverflow.com/questions/61745139
复制相似问题