Docker 图像层:`ADD file:<some_hash> in /` 是什么意思?
Docker image layer: What does `ADD file:<some_hash> in /` mean?
在Docker Hub 图像中有命令列表,每个图像层 为运行。这是一个golang example.
一些应用程序还在 GitHub 中提供了它们的 Docker 文件 。这是一个 golang example.
根据Docker Hub 图像层,ADD file:4b03b5f551e3fbdf47ec609712007327828f7530cc3455c43bbcdcaf449a75a9 in /
是第一个命令。图像层没有包含任何“FROM”命令,它似乎也不够 ADD definition。
下面是问题:
ADD file:<HASH> in /
是什么意思?这是什么格式?
- 有什么方法可以使用散列向上追踪吗?我想哈希代表
FROM
图像,但似乎没有 API。
- 为什么无法使用
ADD file:<HASH> in /
语法构建 dockerfile?有什么方法可以使用这种语法构建图像,或者在两种格式之间进行转换?
ADD
或 COPY
表示文件附加到图像。
那是文件,你无法“追踪”它们。
您不能只复制命令,因为散列不是原始文件。请参阅 https://forums.docker.com/t/how-to-extract-file-from-image/96987 以获取文件。
Docker Hub 历史视图不显示实际的 Docker 文件;相反,它显示的内容基本上是从图像的 docker history
中提取的。这不会保留您正在寻找的具体细节:它不会记住基本图像的名称,或者 ADD
ed 或 COPY
的东西的 build-context 文件名编入。
通过 GitHub 和 Docker 中心链接,golang:*-buster
Dockerfile is built FROM buildpack-deps:...-scm
; buildpack-deps:buster-scm
is FROM buildpack-deps:buster-curl
; that is FROM debian:buster
; and that has a very simple Dockerfile(此处全文引用):
FROM scratch
ADD rootfs.tar.xz /
CMD ["bash"]
FROM scratch
starts 来自完全空的图像;这是 Docker 图像树的基础(以及告诉 docker history
和类似工具停止的原因)。 ADD
行解压 Debian 系统映像的 tar 文件。
如果您查看 docker history
或您引用的 Docker 集线器历史视图,您应该能够看到这些相同的步骤正在发生。 ADD file:4b0... in /
对应ADD rootfs.tar.gz /
,第二行是CMD ["bash"]
。它不会被 Docker 文件或图像分割,并且不会保存 ADD
中的原始文件名。 (如果没有 rootfs.tar.gz
的 contents,无论如何你都无法复制图像,所以知道它的文件名只是稍微有点帮助,但不是必需的。)
ADD file:hash in /path
语法不是标准的 Docker 文件语法(单词 in
不是其中的一部分)。我不确定是否有一种可靠的方法可以将主机文件或 URL 转换为散列,但是构建图像并查看其 docker history
会告诉你(假设你有一个完美的匹配用于文件元数据)。无法恢复到原始文件名或语法,也绝对无法恢复到文件内容。
在Docker Hub 图像中有命令列表,每个图像层 为运行。这是一个golang example.
一些应用程序还在 GitHub 中提供了它们的 Docker 文件 。这是一个 golang example.
根据Docker Hub 图像层,ADD file:4b03b5f551e3fbdf47ec609712007327828f7530cc3455c43bbcdcaf449a75a9 in /
是第一个命令。图像层没有包含任何“FROM”命令,它似乎也不够 ADD definition。
下面是问题:
ADD file:<HASH> in /
是什么意思?这是什么格式?- 有什么方法可以使用散列向上追踪吗?我想哈希代表
FROM
图像,但似乎没有 API。 - 为什么无法使用
ADD file:<HASH> in /
语法构建 dockerfile?有什么方法可以使用这种语法构建图像,或者在两种格式之间进行转换?
ADD
或COPY
表示文件附加到图像。那是文件,你无法“追踪”它们。
您不能只复制命令,因为散列不是原始文件。请参阅 https://forums.docker.com/t/how-to-extract-file-from-image/96987 以获取文件。
Docker Hub 历史视图不显示实际的 Docker 文件;相反,它显示的内容基本上是从图像的 docker history
中提取的。这不会保留您正在寻找的具体细节:它不会记住基本图像的名称,或者 ADD
ed 或 COPY
的东西的 build-context 文件名编入。
通过 GitHub 和 Docker 中心链接,golang:*-buster
Dockerfile is built FROM buildpack-deps:...-scm
; buildpack-deps:buster-scm
is FROM buildpack-deps:buster-curl
; that is FROM debian:buster
; and that has a very simple Dockerfile(此处全文引用):
FROM scratch
ADD rootfs.tar.xz /
CMD ["bash"]
FROM scratch
starts 来自完全空的图像;这是 Docker 图像树的基础(以及告诉 docker history
和类似工具停止的原因)。 ADD
行解压 Debian 系统映像的 tar 文件。
如果您查看 docker history
或您引用的 Docker 集线器历史视图,您应该能够看到这些相同的步骤正在发生。 ADD file:4b0... in /
对应ADD rootfs.tar.gz /
,第二行是CMD ["bash"]
。它不会被 Docker 文件或图像分割,并且不会保存 ADD
中的原始文件名。 (如果没有 rootfs.tar.gz
的 contents,无论如何你都无法复制图像,所以知道它的文件名只是稍微有点帮助,但不是必需的。)
ADD file:hash in /path
语法不是标准的 Docker 文件语法(单词 in
不是其中的一部分)。我不确定是否有一种可靠的方法可以将主机文件或 URL 转换为散列,但是构建图像并查看其 docker history
会告诉你(假设你有一个完美的匹配用于文件元数据)。无法恢复到原始文件名或语法,也绝对无法恢复到文件内容。