首页 > 解决方案 > 运行 DOCKER BUILD 时复制命令失败

问题描述

我正在尝试创建一个 Docker 映像,但它不工作。我正在尝试从 CLI 运行此 Docker 命令,但出现以下错误:

(from the <repo root>/src/Services/Accounts/Accounts.Api)
> docker build .

错误信息:

Step 7/18 : COPY ["src/Services/Accounts/Accounts.Api/Accounts.Api.csproj", "src/Services/Accounts/Accounts.Api/"]
COPY failed: stat /var/lib/docker/tmp/docker-builder937056687/src/Services/Accounts/Accounts.Api/Accounts.Api.csproj: no such file or directory

这是我的 Dockerfile

FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
RUN  ls -al
COPY ["src/Services/Accounts/Accounts.Api/Accounts.Api.csproj", "src/Services/Accounts/Accounts.Api/"]
COPY ["src/Services/Accounts/Accounts.Api/NuGet.config", "src/Services/Accounts/Accounts.Api/"]

RUN dotnet restore "src/Services/Accounts/Accounts.Api/Accounts.Api.csproj"
COPY . .
WORKDIR "/src/src/Services/Accounts/Accounts.Api"
RUN dotnet build "Accounts.Api.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "Accounts.Api.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Hornet.Accounts.Api.dll"]

我也尝试从 repo 根目录运行它:

> docker build .\src\Services\Accounts\Accounts.Api

为什么它试图在某个/var/lib/docker/tmp/blah文件夹中找到我的文件?

更多信息:

标签: docker

解决方案


我认为我们可以通过阐明如何使用构建上下文以及如何指定 Dockerfile 的位置来解决这个问题。

Docker 构建命令用法如下所示:

docker build [OPTIONS] PATH

您的构建上下文是您定义的位置PATH,Docker 可以使用构建上下文中的文件进行构建。(您不能使用构建上下文之外的文件进行构建。)

COPY语句中的 Dockerfile 中,您指定了源文件相对于存储库根目录的位置。这意味着

<root of your repo>您应该像这样从with运行您的构建命令PATH .

docker build .

您尚未在问题中指定 Dockerfile 的路径,但在我看来,它位于您的存储库的子文件夹中。为了使您的构建工作发出 docker build 命令,<root of your repo>如下所示:

docker build -f <path to Dockerfile> .

您的 Dockerfile 必须在构建上下文中。

我认为正确获取构建上下文和 Dockerfile 的位置将修复您的构建。

还要记住使用-t标志来标记您的图像。

为什么它试图在某些 /var/lib/docker/tmp/blah 文件夹中找到我的文件?

您可能知道,Docker 在 Docker for Windows 应用程序的底层使用 Linux VM 来开发基于 Linux 的容器。此位置仅指 VM 中的位置。


推荐阅读