我有一个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(存储库的根)位于同一位置.
鉴于此,有没有办法"记住"码头工具构建的起点,并使用它来定位ADD
?(具体来说,在本地开发环境中运行它将whereami
在构建时与构建服务器有所不同.)或者我是否坚持使用交错这些命令,首先复制配置,然后下载依赖项,等等?
当我构建时,我从我的项目的根目录(包含一个src
文件夹)执行此操作:
docker build -t myapp:dev .
我得到的错误是:
lstat src/config.json:没有这样的文件或目录
如果我插入RUN pwd
docker build报告它是/
,但我不知道这是否是它认为它的'context'(也就是说,任何ADD
命令都相对于它pwd
).
该docker build
命令有一个必需参数,一个上下文路径,用于发送到docker引擎以执行构建.此路径通常是单个路径.
,使得结果命令看起来像docker build -t myimage:latest .
.所有ADD
和COPY
命令都从该上下文中提取文件,在上面的示例中,docker build
将使用运行该命令的当前目录.对于服务器和运行docker build
命令的每个用户,他们只需要传递他们在本地计算机上的工作目录.
您可以执行的另一项更改ADD
和COPY
命令行为的方法是更改WORKDIR
定义容器内命令的相对路径,但不影响从使用build命令发送的上下文中提取文件的位置.