有条件地忽略 COPY 上的 .dockerignore 文件

Posted

技术标签:

【中文标题】有条件地忽略 COPY 上的 .dockerignore 文件【英文标题】:Conditionally ignoring a .dockerignore file on COPY 【发布时间】:2018-06-29 11:53:45 【问题描述】:

我有一个前端构建,它使用 Dockerfile 的变体进行多个步骤:开发、CI(使用 Jenkins)和生产。我不想连续下载用于 CI 和生产构建图像的 node_modules (两者都在同一个盒子上连续发生)。 Dev 的 node_modules 托管在一个卷上,以降低重新启动 dev 容器的开销。

三个阶段都共享同一个.dockerignore 文件,其中有一行不包括node_modules。是否可以通过COPY node_modules/* node_modules/ 之类的方式添加 node_modules?我徒劳地寻找一种在 CI 和生产构建的构建部分使用绑定挂载的方法。这似乎是不可能的。

【问题讨论】:

你能在你想要COPY node_modules/* node_modules/的环境中使用不同的Dockerfile吗? @vivekyad4v 是的,已经是这样了。 【参考方案1】:

目前没有这样的方式可以提供不同的.dockerignore 文件。

作为替代方案,您可以在主机上使用cpnode_modules 复制到不同的目录,例如./node_new_module,或者可能将cp 命令集成到您的CI 中。

之后,您可以使用新的./node_new_module 复制 Dockerfile 中的节点模块 -

COPY ./node_new_modules/* node_modules/

希望这对您有所帮助或提供解决此问题的方法。

【讨论】:

以上是关于有条件地忽略 COPY 上的 .dockerignore 文件的主要内容,如果未能解决你的问题,请参考以下文章

python覆盖模块可以有条件地忽略单元测试中的行吗?

Postgresql忽略触发器上的“何时”条件

有条件地 [JsonIgnore]

如果未提供列列表,Redshift COPY 命令将忽略表默认值

C ++:忽略声明

如何有条件地在条形图上的条形图上显示数据框的不同列值?