使用ADD时覆盖.dockerignore文件
我有一个Rockerfilebuild立4个图像; 我也有一个中央.dockerignore
文件。 对于其中一个图像,我需要被.dockerignore
文件阻塞的.dockerignore
– 执行ADD
或COPY
强制添加/忽略此列表时,有没有办法?
在一个文件中这样做会容易得多,而不是三个单独的…!
在一个简单的方法没有。
.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/
更改应用结构
我能想到的另外一个有用的选项是将ADD
或COPY
分割成多个命令,这样就不需要依靠.dockerignore
过滤文件到其他3个图像。 这可能需要将您的assets
目录存储在应用程序根目录之外。