Docker构建的目录是什么?

时间:2017-01-12 01:08:36

标签: 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命令是提前放置的,因为它获得了应用程序依赖性,这在逻辑上应该在流程的早期发生。 (它还将一堆命令链接在一起,以便保持较低的层数。)但是,ADD命令需要与Dockerfile(存储库的根目录)位于同一位置。

鉴于此,有没有办法记住' docker build从哪里开始,并使用它来定位ADD? (具体来说,在构建服务器时,在本地开发环境中运行它将具有不同的whereami。或者我是否仍在使用交错这些命令,首先复制配置,然后下载依赖项,等等?

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

docker build -t myapp:dev .

我得到的错误是:

  

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

如果我插入RUN pwd,则泊坞窗版本会将其报告为/,但我不知道这是否是它所认为的那种情况' context&#39 ; (即,任何ADD命令都相对于pwd)。

1 个答案:

答案 0 :(得分:9)

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

更改ADDCOPY命令行为的唯一方法是更改​​WORKDIR,它定义内部命令的相对路径您的容器,但不影响从您使用构建命令发送的上下文中提取文件的位置。