我有一个构建4个图像的Rockerfile;我还有一个中央.dockerignore文件.对于其中一个图像,我需要被.dockerignore文件阻止的资产 – 在执行ADD或COPY强制添加/忽略此列表时是否有办法?
在一个文件中执行此操作要容易得多,而不是三个单独的…!
最佳答案
在正常的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没有在每次构建之前发送构建上下文,只对每个ADD / COPY命令进行过滤,因此有希望.但是由于忽略数据只在启动时被读取一次,所以你不能做任何像在构建的不同阶段复制不同的.dockerignore文件一样的时髦.
使用MOUNT
一种选择是继续按原样使用.dockerignore,并使用Rocker MOUNT
command手动复制被忽略的目录.他们在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个图像.这可能需要将您的资产目录存储在应用程序根目录之外.