【问题标题】:Docker will first file of COPY be overwritten by second file of COPY when same filename当文件名相同时,Docker 将 COPY 的第一个文件被 COPY 的第二个文件覆盖
【发布时间】:2019-01-17 22:15:48
【问题描述】:

我想在我的Dockerfile 中添加一个条件COPY,但由于此选项不存在,我遇到了this 解决方法。假设我有以下情况(文件名简化):

COPY file1.txt another_folder/file1.txt* /etc/some_folder/

如果第二个another_folder/file1.txt 存在,第一个file1.txt 会被第二个another_folder/file1.txt 覆盖吗?这样/etc/some_folder/file1.txt 将成为another_folder 中的一个(如果存在),否则为第一个。

两个文件名将同名但内容不同。

为了事先说明清楚,我想要描述的行为。

【问题讨论】:

  • IMO 最好将条件移动到 dockerfile 之外的构建脚本
  • @stacksonstacks 你认为像上面那样做有缺点吗?如果可能的话,这看起来很优雅,但如果我错了,请教我。
  • 它将其视为代码异味。这将创建一个可以生成两个不同图像的 dockerfile。通常情况下,1:1 dockerfile 到图像是要走的路。很可能,不同的配置在最终图像中很重要,应该这样标记
  • 查看我对这个问题的回答,stackoverflow.com/a/54245466/4980651。它改进了解决方法,并且更容易理解。
  • @Siyu 谢谢,但我想先回答我的问题,因为我想了解它是否有效,以及为什么如果它有效则不是一个好的解决方案。

标签: docker dockerfile


【解决方案1】:

自己跑过去看看。简短的回答:是的,它可以满足您的需求

FROM alpine
COPY f1.txt t/f1.txt*  /
RUN cat f1.txt

在 f1.txt 中,我输入了“aaa”。在 t/f1.txt 中,我输入了“bbb”。

构建显示“bbb”。

如果我删除 t/f1.txt,构建会显示“aaa”

【讨论】:

  • 感谢您的确认。有什么理由不使用它吗?
猜你喜欢
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-17
  • 2014-05-01
  • 2021-03-29
相关资源
最近更新 更多