在我的Dockerfile中,我试图将主机的目录复制到图像中。我注意到如果我使用一个相对目录,像这样:
COPY ./foo/bar /
COPY /foo/bar /
当我尝试构建图像时,我得到的错误也是令人困惑的:
lstat /foo/bar: no such file or directory
…因为如果我在主机上做一个ls /foo/bar
,它就在那里。
是否有一些语法我错了,还是别的什么?
另一位用户在评论中回答。阅读docker构建文档
docker build命令从Dockerfile和" context "构建docker镜像。构建的上下文是位于指定PATH或URL中的文件集。构建过程可以引用上下文中的任何文件。例如,您的构建可以使用COPY指令来引用上下文中的文件。
编辑:正如the Fool在他关于上下文的评论中指出的那样。把上下文想象成根目录,docker不能离开。
通俗地说:您只能使用与您设置的上下文相关的路径执行COPY命令。
假设你有这样的目录结构:
<Dockerfile path>/
Dockerfile
somefile.txt
<your context directory>/
config/configfile
data/datafile
使用docker build命令:
docker build -f <Dockerfile path>/Dockerfile /<your context directory>
在docker文件中,你可以指定相对于的路径。目录,但不能访问上下文之上的任何内容。目录中。somefile.txt无法从Dockerfile访问。