asp.net - 使用Visual Studio和Asp.Net Core的Dockerfile错误

标签 asp.net visual-studio docker .net-core

最近,我在启用了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/

相关文章:

asp.net - 浏览器何时删除 session cookie?

asp.net - EF 4.1异常 "The provider did not return a ProviderManifestToken string"

c++ - 预处理器开关确定类的版本

c#如何正确格式化ffmpeg用户输入流?

docker - IIS Dockerfile : APPCMD failed with error code 4312

docker - 如何组合两个或多个 Docker 镜像

c# - 如何使用 C#、ASP.NET、SQL Server 端处理实现 jQuery DataTables 插件?

c# - 如何从 Windows 应用程序将用户名密码发送到网站

c# - 使用文本框条目过滤具有 int 值的 datagridview? VS C#

docker - 遇到 fatal error 。需要库 'libhostpolicy.so'