Dockerfile:将目录从 Windows 主机复制到 docker 容器

Moe*_*ald 3 docker

我想构建一个 Docker 镜像,包括我的自定义 Powershell 模块。因此,我使用 Microsoft 的microsoft/powershell:latest图像,我想从中创建自己的图像,其中包括我的 psm1 文件。

对于简单的测试,我有以下 docker 文件:

FROM microsoft/powershell:latest
RUN mkdir -p /tmp/powershell
COPY  C:/temp/somedirectory /tmp/powershell
Run Code Online (Sandbox Code Playgroud)

我想将 C:\temp\somedirectory 中包含的文件复制到 docker linux 容器。构建图像时,我收到以下错误:

C:\temp\docker_posh> docker build --rm -f Dockerfile -t docker_posh:latest 。

将构建上下文发送到 Docker 守护进程 2.048kB

第 1/3 步:从 microsoft/powershell:latest ---> 9654a0b66645

第 2/3 步:运行 mkdir -p /tmp/powershell ---> 使用缓存 ---> 799972c0dde5

步骤 3/3 : COPY C:/temp/somedirectory /tmp/powershell COPY failed: stat /var/lib/docker/tmp/docker-builder566832559/C:/temp/somedirectory: no such file or directory

我当然知道 Docker 说我找不到文件/目录。因此,我还尝试了C:/temp/somedirectory/.C:/temp/somedirectory/*C:\\temp\\somedirectory\\作为 Dockerfile 中的替代源路径 -> 结果:它们都不起作用。

docker version
    Client:
       Version:       17.12.0-ce
       API version:   1.35
       Go version:    go1.9.2
       Git commit:    c97c6d6
       Built: Wed Dec 27 20:05:22 2017
       OS/Arch:       windows/amd64

    Server:
       Engine:
       Version:      17.12.0-ce
       API version:  1.35 (minimum version 1.12)
       Go version:   go1.9.2
       Git commit:   c97c6d6
       Built:        Wed Dec 27 20:12:29 2017
       OS/Arch:      linux/amd64
       Experimental: true
Run Code Online (Sandbox Code Playgroud)

如何通过 Dockerfile 复制包含子文件夹和文件的文件夹?

yam*_*enk 10

构建 docker 镜像时,您不能复制构建上下文之外的文件。构建上下文是您为 docker build 命令指定的路径。在指导的情况下

C:\temp\docker_posh> docker build --rm -f Dockerfile -t docker_posh:latest .
Run Code Online (Sandbox Code Playgroud)

.指定的构建上下文C:\temp\docker_posh。因此C:/temp/somedirectory无法访问。您可以将 Dockerfile 移动到 temp,也可以在C:\temp. 但请记住修复 Dockerfile 指令以使路径相对于构建上下文。