运行DOCKER BUILD时复制命令失败

运行DOCKER BUILD时复制命令失败,docker,Docker,我正在尝试创建一个Docker映像,但它不起作用。我试图从CLI运行此Docker命令,但出现以下错误: (from the <repo root>/src/Services/Accounts/Accounts.Api) > docker build . 这是我的文件 FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2.1-sd

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

(from the <repo root>/src/Services/Accounts/Accounts.Api)
> docker build .
这是我的文件

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
文件夹中查找我的文件

进一步资料:

  • Windows 10操作系统
  • Docker CE与Linux容器
  • VSCode

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

Docker build命令的用法如下所示:

docker构建[选项]路径

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

COPY
语句的Dockerfile中,指定源文件相对于repo根的位置。这意味着

您应该从
路径运行build命令,如下所示:

docker构建。

您没有在问题中指定Dockerfile的路径,但在我看来,它位于您的repo的子文件夹中。要使构建工作正常,请从
中发出docker build命令,如下所示:

docker build-f.

Dockerfile必须位于生成上下文中

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

还要记住使用
-t
标记标记图像

为什么它要在/var/lib/docker/tmp/blah文件夹中查找我的文件


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

要使
复制
正常工作,您试图复制的文件(例如
/src/Services/Accounts/Accounts.Api/Accounts.Api.csproj
)必须位于构建上下文中。显然它不见了。请阅读如何工作,特别是什么是最重要的。我还假设你知道它的用途和工作原理。Sweet-thanky you@mark:)我误解了我所提供的
参数的用法。我以为这是本地的文件夹来寻找Dockerfile。。。但是它是
构建上下文的
路径。明白了:)太好了,谢谢你。
> docker build .\src\Services\Accounts\Accounts.Api