我有一个构建 4 个图像的 Rockerfile;我也有一份中央.dockerignore档案。对于我需要被.dockerignore文件阻止的资产的其中一个图像 - 有没有办法在执行ADD或COPY强制添加/忽略此列表时?
与三个单独的文件相比,在一个文件中执行此操作会容易得多......!
我有一个构建 4 个图像的 Rockerfile;我也有一份中央.dockerignore档案。对于我需要被.dockerignore文件阻止的资产的其中一个图像 - 有没有办法在执行ADD或COPY强制添加/忽略此列表时?
与三个单独的文件相比,在一个文件中执行此操作会容易得多......!
以简单的方式没有。
该.dockerignore文件用于在读取Dockerfile.
看不到您的docker daemon构建文件夹,当构建开始时,上下文构建文件夹中的所有文件都被压缩(或只是打包)并发送到守护程序,然后它才会读取您Dockerfile以使用它收到的文件构建容器。
更多内容.dockerignore:https ://docs.docker.com/engine/reference/builder/#/dockerignore-file
在正常的 Docker 构建中,.dockerignore文件会影响在构建开始时打包并发送到 docker 服务器的“构建上下文”。如果“构建上下文”不包含文件,则您无法引用它们,因此这就是排除文件的方式。对于构建,它们不“存在”。
Rocker声称通过不向服务器发送构建上下文来以不同的方式运行。代码看起来像每个ADD/COPY步骤都被组合成一个忽略文件的tar 文件。此外,.dockerignore启动时读取一次并缓存。
由于 Rocker 不会在每次构建之前发送构建上下文,只过滤每个ADD/COPY命令,所以有希望。但是由于忽略数据在启动时只读取一次,你不能做任何时髦的事情,比如.dockerignore在构建的不同阶段复制不同的文件。
MOUNT一种选择是继续按.dockerignore原样使用并使用RockerMOUNT命令手动复制被忽略的目录。他们在 mount 部分的最后一个示例演示了:
FROM debian:jessie
ADD . /app # assets/ in .dockerignore
WORKDIR /app
MOUNT .:/context
RUN cp -r /context/assets /app # include assets/
我能想到的唯一其他有用的选项是将您的ADDor拆分COPY为多个命令,这样您就不必依赖 将.dockerignore文件过滤到其他 3 个图像。这可能需要将您的assets目录存储在应用程序根目录之外。