Docker构build的目录是什么?

我有一个Dockerfile,其中包括以下指令:

FROM node:alpine RUN cd /tmp && \ # several lines downloading/installing packages from zips ... ADD src/config.json /myapp/config.json WORKDIR /myapp 

这旨在从应用程序库的根目录运行以构buildDocker容器。 RUN命令放置得很早,因为它获得了应用程序依赖关系,这在逻辑上应该在进程的早期发生。 (为了保持低层数,它也将一堆命令链接在一起)。但是, ADD命令期望与Dockerfile(存储库的根目录)位于相同的位置。

鉴于此,是否有一种方法可以“记住”docker构build的起点,并使用它来定位ADD ? (具体来说,在本地开发环境中运行时,与构build服务器相比,构build时会有不同的whereami )。或者,我是否交错使用了这些命令,先复制configuration,然后下载依赖关系等等?

当我build立,我从我的项目的根目录(包含一个src文件夹)这样做:

 docker build -t myapp:dev . 

我得到的错误是:

lstat src / config.json:没有这样的文件或目录

如果我插入RUN pwd ,docker build报告它是/ ,但是我不知道这是否是它认为是'context'(即任何ADD命令是相对于pwd )。

docker build命令有一个必需的参数,这是上下文发送到docker引擎执行构build的path。 这条路通常是一个单一的. ,使得生成的命令看起来像docker build -t myimage:latest . 。 所有的ADDCOPY命令都会从这个上下文中提取文件,在上面的例子中,将会使用你运行docker build命令的当前目录。 对于运行docker build命令的服务器和每个用户,他们只需要传递他们在本地机器上的工作目录。

唯一可以改变ADDCOPY命令行为的其他方法是更改WORKDIR ,它定义容器的命令的相对path,但不影响从使用build命令发送的上下文中拉取文件的位置。