最近,我在启用了Docker支持的Visual Studio 2019上创建了一个ASP.Net Core项目。然后,它为我创建了一个完整的Dockerfile,因此我不必为此担心。
如果我使用Docker启动设置从Visual Studio启动应用程序,它将完美构建并运行,这是完美的!
但是当我尝试使用docker build命令手动构建它时,出现一个错误告诉我:COPY failed: stat /var/lib/docker/tmp/docker-builder563776422/Back/Back.csproj: no such file or directory
Back是我的解决方案的名称,也是我在该解决方案中唯一的项目的名称。
如果再更改以下行:COPY ["Back/Back.csproj", "Back/"]
至COPY ["Back.csproj", "Back/"]
现在可以使用命令进行构建。对我来说,这种修改是合乎逻辑的,因为Dockerfile已经位于我项目的文件夹内,而不是解决方案的根目录。
我在这里有点迷惑,为什么它在修改之前就可以在Visual Studio上使用?我可以更改这行吗?
这是完整的Dockerfile(修改前):
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["Back/Back.csproj", "Back/"]
RUN dotnet restore "Back/Back.csproj"
COPY . .
WORKDIR "/src/Back"
RUN dotnet build "Back.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Back.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Back.dll"]
最佳答案
因为生成的默认Dockerfile假定您将解决方案文件夹设置为构建上下文。构建上下文是将被复制到Docker守护程序的目录,提供您的Dockerfile可以复制到镜像后的文件。在解决方案级别上这样做很有意义。对于Dockerfile也存在于解决方案级别,这将更有意义。
一种选择是将Dockerfile保留在原处,并将解决方案目录设置为构建上下文:docker build ..\
(其中..\
指示向上导航至一个目录至解决方案目录)。
另一个选项是将Dockerfile移动到解决方案目录中。
关于asp.net - 使用Visual Studio和Asp.Net Core的Dockerfile错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60948656/