Docker构建从哪个目录开始?

Docker构建从哪个目录开始?,docker,Docker,我有一个Dockerfile,其中包括以下指令: FROM node:alpine RUN cd /tmp && \ # several lines downloading/installing packages from zips ... ADD src/config.json /myapp/config.json WORKDIR /myapp 这将从应用程序存储库的根运行,以构建docker容器。RUN命令放置得很早,因为它获取了应用程序依赖项,这在逻辑上应该在过

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

FROM node:alpine
RUN cd /tmp && \
  # several lines downloading/installing packages from zips

...

ADD src/config.json /myapp/config.json

WORKDIR /myapp
这将从应用程序存储库的根运行,以构建docker容器。
RUN
命令放置得很早,因为它获取了应用程序依赖项,这在逻辑上应该在过程的早期发生。(它还将一组命令链接在一起,以保持较低的层数。)但是,
ADD
命令希望与Dockerfile(存储库的根)位于同一位置

有鉴于此,是否有一种方法可以“记住”docker构建从何处开始,并使用它来确定
添加的方向?(具体地说,在本地开发环境中运行此命令时,生成服务器的
位置与生成服务器的
位置不同。)或者,我是否必须交错执行这些命令,首先复制配置,然后下载依赖项,依此类推

构建时,我从项目的根目录(包含
src
文件夹)执行此操作:

我得到的错误是:

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


如果我插入
RUN pwd
,docker build会将其报告为
/
,但我不知道这是否是它认为的“上下文”(即,任何
ADD
命令都与
pwd
相关)。

docker build
命令有一个必需的参数,要发送到docker引擎以执行生成的上下文的路径。此路径通常是一个
,使生成的命令看起来像
docker build-t myimage:latest.
。所有
ADD
COPY
命令都会从该上下文中拉入文件,在上面的示例中,将使用运行
docker build
命令的当前目录。对于运行
docker build
命令的服务器和每个用户,他们只需要传递本地机器上的工作目录


要更改
ADD
COPY
命令行为,您唯一可以做的另一件事是更改
WORKDIR
,它定义了容器内命令的相对路径,但不影响从您使用build命令发送的上下文中提取文件的位置。

这个文档链接可能会有所帮助-@Rao您是否有该文档的特定部分(当然,我已经读过)可以说明问题的答案?我非常困惑,然后:
ADD
似乎在“context”目录中找不到任何内容。(见问题更新)你描述的方式和我预期的一样,但有些地方出了问题。是否有方法验证docker所看到的上下文目录(或当前workdir)?是的,请参阅以了解如何打印当前目录上下文。事实证明,这是一个注释问题,正如我更清楚地描述的那样。我应该包括全部实际行。谢谢你在上下文中的引导!是否可以突出显示此答案的最后一句?它澄清了Docker文档没有说明的内容--
WORKDIR
只影响容器内随
build
发送的上下文。因此,
WORKDIR/
不会拉入计算机的根目录,而是在构建时引用作为上下文的父目录。
docker build -t myapp:dev .