使用ADD时覆盖.dockerignore文件

我有一个Rockerfilebuild立4个图像; 我也有一个中央.dockerignore文件。 对于其中一个图像,我需要被.dockerignore文件阻塞的.dockerignore – 执行ADDCOPY强制添加/忽略此列表时,有没有办法?

在一个文件中这样做会容易得多,而不是三个单独的…!

在一个简单的方法没有。

.dockerignore文件用于在读取Dockerfile 之前过滤将在构build中使用的Dockerfile

docker daemon没有看到你的build文件夹,当构build开始时,上下文构build文件夹中的所有文件都被压缩(或者只是打包)并发送到守护进程,只有这样它才会读取你的Dockerfile来构build带有文件的容器它收到。

更多有关.dockerignore内容: https : .dockerignore

在一个普通的Docker构build中, .dockerignore文件影响打包并在构build开始时发送到Docker .dockerignore的“构build上下文”。 如果“构build上下文”不包含文件,那么你不能引用它们,所以这是如何排除文件。 他们不“存在”的build设。

摇杆声称不运行构build上下文到服务器运行不同 。 代码看起来像每个ADD / COPY步骤组成一个忽略文件的tar文件 。 此外, .dockerignore在启动时被读取一次并被caching 。

由于Rocker在每次构build之前都没有发送构build上下文,所以只对每个ADD / COPY命令进行过滤,这是有希望的。 但是由于在启动时只忽略一次忽略的数据,所以你不能在构build的不同阶段拷贝不同的.dockerignore文件。

使用MOUNT

一种select是继续使用.dockerignore ,并使用Rocker MOUNT命令手动复制忽略的目录。 他们在mount部分的最后一个例子演示了:

 FROM debian:jessie ADD . /app # assets/ in .dockerignore WORKDIR /app MOUNT .:/context RUN cp -r /context/assets /app # include assets/ 

更改应用结构

我能想到的另外一个有用的选项是将ADDCOPY分割成多个命令,这样就不需要依靠.dockerignore过滤文件到其他3个图像。 这可能需要将您的assets目录存储在应用程序根目录之外。