docker - 如何在不使用 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 的一部分)
谢谢你的帮助!
解决方案
推荐阅读
- java - 在 Java 中,当我们在终端上打印字符串文字时,该字符串文字是否也存储在字符串池中?
- ffmpeg - FFmpeg 剪切视频结束没有声音
- python - 3D 底图 添加 3D 条形图
- python - sys.exit(0) 是在 python 中退出/杀死线程的有效方法吗?
- node.js - 我们可以使用 fcm-node 推送通知将对象发送到数据中吗
- android - FileNotFoundException 打开失败:Android 模拟器上的 EACCES(权限被拒绝)
- java - 有没有办法在 ByteBuddy 代理之前调用已加载类的方法上的建议()?
- python - pandas:如果其他列的任何子组中的值 = yes,则将列的值设置为 true
- javascript - 节点 js 和 JWT。如何将访问令牌保存到 Node.js 中的授权标头?
- python - 使用包含字符串的变量使用 Selenium 查找值