在 Docker 文件中使用 COPY 将文件夹从 Windows 主机 OS 复制到 Docker 图像

Copy folder from Windows host OS into Docker image using COPY in Docker file

我想将文件夹 D:\test 从主机 OS (Windows) 复制到我的 docker 图像。

我的 Docker 文件是 D:\Programs>

Docker 文件

FROM mcr.microsoft.com/windows/servercore:ltsc2019
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

RUN mkdir root
RUN cd root
WORKDIR /root
RUN mkdir test
COPY D:/test to /root/test
    #USING 'COPY' here instead of 'ADD' because of 

从文件夹 D:\Programs> I 运行 命令 docker build . -t test

但是我得到错误:

COPY failed: file not found in build context or excluded by .dockerignore: stat test: file does not exist

我尝试了命令 COPY D:/test to /root/testCOPY ./test to /root/test

我知道发生此错误是因为我从中复制的路径必须与构建上下文相关(docker 构建中的 .)。它不能是构建上下文之外的系统上的任意路径。

我想通过使用 . 我会在我的构建上下文 D:\Programs> 的上下文 D:\ 中,但我想不是。我的 COPY 命令应该是什么样的?

我已经检查过这里了:

更新 1

我将 test 文件夹放在 D:\Programs 中,我的 Docker 文件也位于其中,所以我现在的结构是:

D:\Programs
    \Test
    Dockerfile

然后我再次 运行 构建命令,我尝试了 COPY test to /root/testCOPY ./test to /root/test,但都失败并出现上述相同的错误。

我知道如何做到这一点的唯一方法是在构建过程中更改 docker 文件位置,将复制的文件夹保持在上下文中。

如下:

  • 'test' 文件夹位于 D:/test

  • 设置docker文件复制命令为:

    COPY test /root/test

  • 假设 docker 文件位于 D:/Programs/dockerfile

  • 在 CLI 中导航到 D:/

  • docker build -f ./Programs/dockerfile .

. 将“test”文件夹保留在构建上下文中。据我所知,您不能使用 docker 构建进入父目录等,因此您想留在父文件夹中并向下进入 docker 文件。

如果您 运行 来自 D:\Programsdocker build ... 该文件夹是 docker 构建上下文。 Dockerfile 中使用的所有文件都必须存在。

d:\filesd:\programs外面,所以永远找不到。

您需要将files内容复制到您运行命令所在的地方,您可以使用此复制行

COPY samplefile1.txt /root/test

我假设您只在 COPY D:/test to /root/test 中添加了 to 作为缩写,但我还是建议检查一下。

如果您真的需要 D:/Programs 中的内容并且不能将其移动到当前构建上下文中的文件夹,我认为有两个通用选项:

  1. 更改构建上下文 - 我建议将构建上下文设置为 D:/ 并将 D:/ 目录中除 Programs 之外的每个文件夹添加到.dockerignore 文件,然后您可以从 D:/ 中某处的某个子目录引用 Dockerfile,并根据需要在构建时复制您的文件

  2. 在运行时创建绑定安装 - 您可以在运行时将 D:/Programs 目录映射到容器 (/my-programs) 内的文件夹,然后将文件从该文件夹复制到/root/test 或者只使用绑定安装文件夹 (/my-programs)

如果将来可以在构建时使用绑定安装,您可以在创建 docker 图像时使用第二个选项