docker - Docker 镜像层:`ADD 文件是什么:在 /` 中是什么意思?
问题描述
在 Docker Hub 镜像中,有为每个镜像层运行的命令列表。这是一个 golang示例。
一些应用程序还在 GitHub 中提供其Dockerfile。这是一个 golang示例。
根据 Docker Hub 镜像层,ADD file:4b03b5f551e3fbdf47ec609712007327828f7530cc3455c43bbcdcaf449a75a9 in /
是第一个命令。图像层没有包含任何“FROM”命令,它似乎也不足以满足ADD 定义。
所以这里有问题:
- 是什么
ADD file:<HASH> in /
意思?这是什么格式? - 有什么方法可以使用哈希向上追踪吗?我想哈希代表
FROM
图像,但似乎没有 API。 - 为什么无法使用
ADD file:<HASH> in /
语法构建 dockerfile?有什么方法可以使用这种语法构建图像,或者在两种格式之间进行转换?
解决方案
Docker Hub 历史视图不显示实际的 Dockerfile;相反,它显示了基本上从docker history
图像中提取的内容。这不会保留您正在寻找的具体细节:它不记得基本图像的名称,或者被ADD
编辑或COPY
编辑的东西的构建上下文文件名。
通过 GitHub 和 Docker Hub 链接,构建了golang:*-buster
DockerfileFROM buildpack-deps:...-scm
;buildpack-deps:buster-scm
是FROM buildpack-deps:buster-curl
;那就是FROM debian:buster
;并且有一个非常简单的 Dockerfile(在此全文引用):
FROM scratch
ADD rootfs.tar.xz /
CMD ["bash"]
FROM scratch
从一个完全空的图像开始;那是 Docker 镜像树的基础(以及告诉docker history
和类似工具停止的内容)。该ADD
行解压缩 Debian 系统映像的 tar 文件。
如果您查看docker history
或引用您引用的 Docker Hub 历史视图,您应该能够看到这些相同的步骤正在发生。ADD file:4b0... in /
对应于,第二ADD rootfs.tar.gz /
行是CMD ["bash"]
。它不被 Dockerfile 或图像分割,并且ADD
不保存原始文件名。(如果没有.rootfs.tar.gz
ADD file:hash in /path
语法不是标准的 Dockerfile 语法(特别是这个词不是in
它的一部分)。我不确定是否有可靠的方法可以将主机文件或 URL 转换为哈希,但是构建图像并查看它docker history
会告诉您(假设您已经与文件元数据完美匹配)。没有办法恢复到原始文件名或语法,也绝对没有办法恢复到文件内容。
推荐阅读
- javascript - 我的函数返回未定义(JavaScript)
- java - Hibernate 在不同线程上运行时不必要地创建新实体
- firebase - 如何编写只能通过我的应用访问的 Firebase 云功能?
- android - 如果片段在 ScrollView 内,不能动态添加片段?
- c++ - C++、GPIO、单独的数据和时钟线
- angular - Angular Material 2 动态主题颜色
- python - 如何将指标添加到模型 keras
- android - 我在哪里可以找到用于assetlinks.json 的 google play 控制台的密钥库 sha256?
- javascript - 如何使用纯 JavaScript 在数组中使输入值不区分大小写
- python - 如何制作正弦模式平稳时间序列?