在一个图层中复制多个资源

在一个图层中复制多个资源

我想做这个:

COPY src/ public/ config-overrides.js /usr/src/app/

但我通过惨痛的经历才明白,这实际上意味着:

COPY src/* public/* config-overrides.js /usr/src/app/

这根本不是我想要的。

我可以通过 来破解这个问题.dockerignore,但我不喜欢这个解决方案,因为:

  • 如果有新文件添加到 repo,.dockerignore则也需要将其添加到。
  • 我喜欢在我的Dockerfile

如何在单个层中复制文件和目录的明确列表(而不仅仅是内容)?

我只是 SOL 吗?

答案1

您可以重新组织仓库:

app
+-- src
+-- public
\-- config-overrides.js

然后你就

COPY app/ /usr/src/app/

另一种选择是采用多阶段构建:

FROM scratch as app
COPY src/ /usr/src/app/ 
COPY public/ /usr/src/app/ 
COPY config-overrides.js /usr/src/app/ 

FROM your_base
COPY --from=app /usr/src/app/ /usr/src/app/

否则,请将其保留为 3 个单独的层。增加一个层所带来的额外开销实际上微乎其微。您需要合并层的情况是当您有数十个层时,如果您在多个层中有相同的文件并且会覆盖它,或者您更改/删除了在前一个层中创建的文件。

相关内容