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 .
。 所有的ADD
和COPY
命令都会从这个上下文中提取文件,在上面的例子中,将会使用你运行docker build
命令的当前目录。 对于运行docker build
命令的服务器和每个用户,他们只需要传递他们在本地机器上的工作目录。
唯一可以改变ADD
和COPY
命令行为的其他方法是更改WORKDIR
,它定义容器内的命令的相对path,但不影响从使用build命令发送的上下文中拉取文件的位置。