首页 > 解决方案 > 如何在不使用 FROM 的情况下将先前构建阶段的整个文件系统复制到 Dockerfile 中?

问题描述

我们使用 JFrog Artifactory 来管理从 Dockerfiles 创建的 Docker 镜像。它有一个很好的功能,您可以在其中查看创建任何给定的最终 Docker 映像所涉及的所有“层”。

不过,我们必须小心,以免凭据最终显示在使用它们的层中。我们目前这样做的方式是使用带有“COPY --from”的多阶段构建。

然而最近我们需要为特定的 yum 存储库使用凭证,它提供了我们需要的许多依赖项(遍布整个文件系统的数千个文件)。我使用 yum-config-manager 从 ENV 变量中设置密码和用户名。但是,即使我使用FROM depbuilder,所有先前阶段(包括depbuilder)的命令现在都可以在 Artifactory 中看到。

我需要避免这种情况发生,一位同事建议我们可以简单地这样做:

COPY --from=depbuilder / /

这样一来,它就不会将其他阶段的步骤显示为 Artifactory 构建历史的一部分。但是,我担心此命令可能无法正确设置所有所有权和权限,或者它可能会丢失某些文件,因为关于它如何工作的文档充其量似乎参差不齐。

那么,以一种对于在 Artifactory 中查看构建层的人来说是不可见的方式从先前构建阶段复制所有内容的最佳方式是什么?

这是一个屏幕截图,显示了 Artifactory 中的层的样子:(如果我们展开 RUN 步骤,目前我们可以看到通过 ENV 传递到 docker 的凭据,因为它们成为 Artifactory 的 URL 的一部分)

在此处输入图像描述

谢谢你的帮助!

标签: dockerartifactory

解决方案


推荐阅读