docker - 运行 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
文件夹中找到我的文件?
更多信息:
- 视窗 10 操作系统
- 带有 Linux 容器的 Docker CE
- VSCode
解决方案
我认为我们可以通过阐明如何使用构建上下文以及如何指定 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 中的位置。
推荐阅读
- laravel - Laravel 前端网站和 Laravel API 之间的通信,都在 Valet 下
- python - 多重继承 Python,super().__init__ 问题
- android - Flutter Bloc 不断重建小部件而不改变状态
- typescript - 通过括号访问键时如何将键限制为打字稿中定义的键
- javascript - 更改子元素的 src
- java - 如何在 Spring 中通过调用外部 API 来测试服务
- java - IntelliJ IDEA 中的“进程以退出代码 0 完成”是什么意思?
- 2sxc - 当用户在 2sxc 内容应用程序中具有角色的 CRUD 权限时出现 401 错误
- postgresql - 将 PostgreSQL 11 备份恢复到 12 挂起。我该如何调试它?
- python - 在 Tkinter Python 中的第一次迭代后,销毁函数没有有效地销毁帧