Dockerfile COPY指令失败?

所有,我试图坚持从我的主机复制文件到一个图像,以便这些文件可用于每个基于该映像启动的容器。 运行在debian wheezy 64bit作为virtualbox客人。

Dockerfile非常简单(安装倍频图像):

FROM debian:jessie MAINTAINER GG_Python <[redacted]@gmail.com> RUN apt-get update RUN apt-get update RUN apt-get install -y octave octave-image octave-missing-functions octave-nan octave-statistics RUN mkdir /octave RUN mkdir /octave/libs RUN mkdir /octave/libs/jsonlab COPY ~/octave/jsonlab/loadjson.m /octave/libs/jsonlab/. 

发出构build命令后,我得到以下跟踪: docker build -t octave .

 Sending build context to Docker daemon 423.9 kB Sending build context to Docker daemon Step 0 : FROM debian:jessie ---> 58052b122b60 Step 1 : MAINTAINER GG_Python <[..]@gmail.com> ---> Using cache ---> 90d2dd2f7ee8 Step 2 : RUN apt-get update ---> Using cache ---> 4c72c25cd829 Step 3 : RUN apt-get update ---> Using cache ---> b52f0bcb9f86 Step 4 : RUN apt-get install -y octave octave-image octave-missing-functions octave-nan octave-statistics ---> Using cache ---> f0637ab96d5e Step 5 : RUN mkdir /octave ---> Using cache ---> a2d278b2819b Step 6 : RUN mkdir /octave/libs ---> Using cache ---> 65efbbe01c99 Step 7 : RUN mkdir /octave/libs/jsonlab ---> Using cache ---> e41b80901266 Step 8 : COPY ~/octave/jsonlab/loadjson.m /octave/libs/jsonlab/. INFO[0000] ~/octave/jsonlab/loadjson.m: no such file or directory 

Docker绝对拒绝将这个文件从主机复制到镜像中。 不用说loadjson.m文件在那里(猫显示),我所有的尝试改变path(相对,绝对等)失败。 任何build议为什么这个简单的任务是有问题的?

Docker不会扩展〜或$ HOME。 您可能需要显式引用该文件,或者将其相对于Dockerfile本身进行打包。

Docker只能从上下文中复制文件,你所在的文件夹中没有列出dockerignore文件中的任何文件。

当您运行“docker build”docker tars上下文,并将其发送到您连接的docker守护进程。 它只允许您在上下文中复制文件,因为守护进程可能是远程计算机。

除非我了解上下文(我试图从上下文之外复制文件),否则我无法复制COPY,

docker build命令从Dockerfile和上下文构build一个映像。 构build的上下文是指定位置PATH处的文件。 PATH是本地文件系统上的一个目录。

上下文被recursion地处理。 所以,一个PATH包含任何子目录。

构build由Docker守护程序运行,而不是由CLI运行。 构build过程所做的第一件事是将整个上下文(recursion地)发送到守护进程。 在大多数情况下,最好以空目录作为上下文,并将Dockerfile保存在该目录中。 仅添加构buildDockerfile所需的文件。

警告:不要使用根目录/作为PATH,因为它会导致构build将硬盘的全部内容传输到Docker守护进程。

参考: https : //docs.docker.com/engine/reference/builder/#usage