我有一个构建4个图像的Rockerfile;我还有一个中央.dockerignore
文件。对于其中一个图片,我需要被.dockerignore
文件阻止的资源 - 在执行ADD
或COPY
强制添加/忽略此列表时是否有办法?
在一个文件中执行此操作要容易得多,而不是三个单独的...!
答案 0 :(得分:2)
在正常的Docker构建中,.dockerignore
文件会影响"构建上下文"打包并在构建开始时发送到docker服务器。如果"构建上下文"不包含文件然后您无法引用它们,因此这是文件被排除的方式。他们不存在"为了构建。
摇杆claims to run differently by not sending a build context到服务器。 code looks like each ADD
/COPY
step is composed into a tar file that ignores the files。.dockerignore
is read once at startup and cached。另外,Rocker MOUNT
command。
由于Rocker没有在每次构建之前发送构建上下文,只对每个ADD
/ COPY
命令进行过滤,所以有希望。但是由于忽略数据在启动时只被读取一次,你可以做任何类似于在构建的不同阶段复制不同.dockerignore
文件的时髦。
MOUNT
一种选择是继续按原样.dockerignore
使用{{3}}手动复制被忽略的目录。他们在mount部分的最后一个例子演示了:
FROM debian:jessie
ADD . /app # assets/ in .dockerignore
WORKDIR /app
MOUNT .:/context
RUN cp -r /context/assets /app # include assets/
我能想到的唯一其他有用选项是将您的ADD
或COPY
拆分为多个命令,这样您就不必依赖.dockerignore
来过滤文件到其他3个图像。这可能需要将您的assets
目录存储在应用程序根目录之外。
答案 1 :(得分:1)
以简单的方式编号
.dockerignore
文件用于过滤构建之前使用的内容甚至阅读Dockerfile
。
docker daemon
没有看到你的构建文件夹,当构建开始时,上下文构建文件夹中的所有文件都被压缩(或者只是打包)并发送到守护进程,然后它才会读取你的{{ 1}}用它收到的文件构建容器。
有关Dockerfile
的更多内容:https://docs.docker.com/engine/reference/builder/#/dockerignore-file