【问题标题】:Docker History Base Image Add:sha256hashDocker 历史基础镜像地址:sha256hash
【发布时间】:2017-06-17 18:14:41
【问题描述】:

我试图更好地理解docker history 输出。当我运行docker history nginx:latest 时,我得到的输出几乎与Dockerfile 匹配:

/bin/sh -c #(nop) CMD ["nginx" "-g" "daemon off;"]
/bin/sh -c #(nop) EXPOSE 443/tcp 80/tcp/bin/sh -c ln -sf /dev/stdout /var/log/nginx/access.log  && ln -sf /dev/stderr /var/log/nginx/error.log
/bin/sh -c apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62  && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list && apt-get update && apt-get install --no-install-recommends --no-install-suggests -y       ca-certificates nginx=${NGINX_VERSION} nginx-module-xslt nginx-module-geoip nginx-module-image-filter nginx-module-perl nginx-module-njs gettext-base  && rm -rf /var/lib/apt/lists/*
/bin/sh -c #(nop) ENV NGINX_VERSION=1.11.9-1~jessie
/bin/sh -c #(nop) MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com"
/bin/sh -c #(nop) CMD ["/bin/bash"]
/bin/sh -c #(nop) ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da957 in /

有三个值得注意的例外

  1. 除了第三行是 Dockerfile 中的 RUN 命令之外,所有行都以 /bin/sh -c #(nop) 开头 - 没什么大不了的
  2. 命令是相反的(Dockerfile 中的最后一个命令是docker history 列出的第一个命令) - 也没什么大不了的
  3. 这才是关键 - Dockerfile 中的 FROM debian:jessie 行被翻译为:

    ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da957 in / CMD ["/bin/bash"]

我花了一点时间才意识到上面的最后两个命令(ADDCMD ["/bin/bash"] 行)是从基本映像 debian:jessie 继承而来的。一旦我弄清楚这一点,我就对自己说,“自我,file:89ec...da957 必须是包含在文件系统中的rootfs.tar.xz 的 sha256 哈希值。但是不,rootfs.tar.xz 的 sha256 哈希值是 @987654339 @。

这是我的问题:docker history 中列出的哈希值来自哪里?为什么它与 rootfs.tar.xz 的实际哈希不同?

我已经彻底查看了 Docker 的大部分文档,但没有成功,包括:

  1. https://docs.docker.com/engine/userguide/storagedriver/imagesandcontainers/
  2. https://docs.docker.com/engine/reference/commandline/history/
  3. https://docs.docker.com/engine/reference/builder/

哈希值在使用debian:jessie 作为基础图像的所有图像中是一致的。即使docker history debian:jessie 显示相同的哈希值:

/bin/sh -c #(nop) CMD ["/bin/bash"]
/bin/sh -c #(nop) ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da957 in /

我想你可能会同意,debian:jessie Dockerfile 中只有一个文件可能有哈希:

FROM scratch
ADD rootfs.tar.xz /
CMD ["/bin/bash"]

如果有人能提供一些见解或指出我尚未找到的资源,将不胜感激。

【问题讨论】:

    标签: linux docker hash dockerfile sha256


    【解决方案1】:

    docker brew debian image 由中间容器组成,如“Understand images, containers, and storage drivers”中所述。

    参见issue 25925:每一层都存储在(例如)/var/lib/docker/aufs/mnt/

    所以ADD file:89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da95 将添加在/var/lib/docker/aufs/mnt/89ecb642d662ee7edbb868340551106d51336c7e589fdaca4111725ec64da95 中找到的所有文件。

    (注意:我在“Docker missing layer IDs in output”中提到了(nop)部分)

    【讨论】:

      猜你喜欢
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 2020-01-20
      • 2017-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-24
      相关资源
      最近更新 更多