在 Dockerfile 中,复制当前目录除一个目录之外的所有内容

ama*_*ert 6 docker dockerfile

在我的 Dockerfile 中,我有以下内容:

COPY . /var/task
Run Code Online (Sandbox Code Playgroud)

...它将我的应用程序代码复制到图像中。

vendor/执行此复制时我需要排除该目录。

  • 我无法添加vendor/.dockerignore,因为当使用RUN composer install.
  • 我无法指定复制的每个文件和目录,因为它们可能会更改,并且我不能依赖其他开发人员来保持列表更新。

我已尝试以下操作,但出现以下错误:

COPY [^vendor$]* /var/task
Run Code Online (Sandbox Code Playgroud)

当对多个源文件使用 COPY 时,目标必须是一个目录并以 / 结尾

COPY [^vendor$]*/ /var/task
Run Code Online (Sandbox Code Playgroud)

复制失败:未指定源文件

Dav*_*aze 2

实际上将vendor目录添加到文件中就足够了.dockerignore

docker build您可以大致分三个阶段跟踪文件流:

  1. docker build从您指定的目录中读取文件,忽略文件中的内容.dockerignore,并将它们作为构建上下文发送到 Docker 守护进程。
  2. COPY指令将文件从构建上下文复制到容器文件系统中。
  3. RUN指令做进一步的转换或处理。

如果您放入vendor.dockerignore文件,则会阻止该目录包含在构建上下文中。构建速度会更快一些,并且COPY不会将文件复制到映像中。它不会阻止稍后的步骤在映像中RUN composer install创建自己的目录。vendor