【问题标题】:Wrong Dockerfile with Visual Studio and Asp.Net Core使用 Visual Studio 和 Asp.Net Core 的 Dockerfile 错误
【发布时间】:2020-07-11 21:22:33
【问题描述】:

最近,我在 Visual Studio 2019 上创建了一个启用 Docker 支持的 ASP.Net Core 项目。然后它为我创建了一个完整的 Dockerfile,所以我不必担心这个。

如果我从 Visual Studio 启动我的应用程序,使用 Docker 启动设置,它会完美构建然后运行,非常完美!

但是当我尝试使用 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"]

【问题讨论】:

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


【解决方案1】:

您可以在 docker build 期间明确指定 Dockerfile 位置和上下文路径:

docker build -f $dockerfilelocation $contextpath

VS 在为您的项目构建 docker 映像时也是如此:

docker build -f "C:\Temp\Code\WebApp\WebApp\Dockerfile" --force-rm -t webapp:dev --target base  --label "com.microsoft.created-by=visual-studio" --label "com.microsoft.visual-studio.project-name=WebApp" "C:\Temp\Code\WebApp"

【讨论】:

    【解决方案2】:

    因为生成的默认 Dockerfile 假定您将解决方案文件夹设置为构建上下文。构建上下文是将复制到 Docker 守护程序的目录,提供您的 Dockerfile 然后可以复制到映像中的文件。这在解决方案级别是有意义的。 Dockerfile 也存在于解决方案级别也会更有意义。

    一种选择是将 Dockerfile 保留在原处并将解决方案目录设置为构建上下文:docker build ..\(其中..\ 表示向上导航一个目录到解决方案目录)。

    另一个选项是将 Dockerfile 移动到解决方案目录中。

    【讨论】:

      【解决方案3】:

      说明:

      这样,解决方案文件和 csproj 文件将位于同一目录中。 Dockerfile 有一个相对路径。 Dockerfilecsproj 文件需要在同一级别。

      移动文件是个坏主意。一个更简单的选择是在创建项目时检查“将解决方案和项目放在同一目录中选项”

      修复:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-11
        • 2014-01-06
        • 1970-01-01
        • 1970-01-01
        • 2020-07-18
        • 2019-06-07
        • 2016-11-04
        相关资源
        最近更新 更多