当前位置: 首页 > 知识库问答 >
问题:

使用在Docker文件中复制将文件夹从Windows主机操作系统复制到Docker映像中

亢琦
2023-03-14

我要将文件夹d:\test从主机操作系统(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 https://stackoverflow.com/questions/24958140/what-is-the-difference-between-the-copy-and-add-commands-in-a-dockerfile

复制失败:在生成上下文中找不到文件或被.dockerignore:stat test:文件不存在

我尝试了命令将d:/test复制到/root/test将./test复制到/root/test

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

    null

更新1

我将test文件夹放置在d:\programs中,我的Dockerfile也位于此位置,因此我现在有了以下结构:

D:\Programs
    \Test
    Dockerfile

然后再次运行构建命令,尝试copy test to/root/testcopy./test to/root/test,但都失败了,出现了前面提到的相同错误。

共有1个答案

尚嘉庆
2023-03-14

我假设您只是在中将添加到中,将d:/test复制到/root/test作为缩写,但我还是建议检查一下。

如果您确实需要d://programs中的内容,并且不能将其移动到当前构建上下文中的文件夹中,我认为有两个常规选项:

>

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

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

    如果将来可以在构建时使用绑定挂载,那么在创建docker映像时可以使用第二个选项

  •  类似资料:
    • 我的问题与这个关于将文件从容器复制到主机的问题有关;我有一个Dockerfile,它获取依赖项,从源代码编译构建工件,并运行一个可执行文件。我还想复制构建工件(在我的例子中,它是由'../target/'中的生成的,但我认为这个问题也适用于JAR、二进制文件等。 用于容器,而不是图像;我是否需要启动一个容器来从其中获取一个文件?在一个脚本中,我尝试在后台以交互模式运行,将文件复制出去,然后杀死容器

    • 我正在编写来构建应用程序。我知道您可以使用 (请参见将文件从Docker容器复制到主机),但我只想运行 在Dockerfile中是否有一个命令可以用于从容器中复制到主机中?像的反义词吗?

    • 我正在考虑使用Docker在持续集成(CI)服务器上构建我的依赖项,这样我就不必在代理本身上安装所有的运行时和库。 为了实现这一点,我需要将在容器中构建的构建构件复制回主机中。有可能吗?

    • 我正在构建一个新图像,并将内容从主机操作系统文件夹D:\Programs\scrapy复制到其中,如下所示:

    • 我正在使用docker容器来编译一段代码,我不一定要将其docker化。我已使用必要的构建工具设置了一个映像,但我希望以某种方式将编译后的文件从容器中取出,而无需使用docker cp container:/file host/file命令。换句话说,我希望自动化这个过程,以便在构建完成后,将生成的文件复制到主机。 Dockerfile

    • 我正在编写一个Dockerfile来构建一个应用程序。我知道你可以用 (请参阅将文件从Docker容器复制到主机),但我想只运行 并让它将我的创建的构建工件转储到我的主机文件系统的某个地方。 Dockerfile中是否有可以用于从容器复制到主机的命令?与复制相反?