【问题标题】:sha256 of locally built docker image本地构建的docker镜像的sha256
【发布时间】:2017-10-20 14:02:49
【问题描述】:

如何获取已在本地构建的 docker 映像的 sha256 校验和?

我想使用校验和在派生图像中注释FROM 指令:

FROM name@sha256:checksum

我已经尝试过来自docker inspect 的校验和。

  • Layers 列表中的第一个和最后一个校验和都不起作用。
  • "Id" 中的那个不起作用。
  • "Parent" 中的那个不起作用。
  • "Container" 中的那个不起作用。
  • "Image" 中的那个不起作用。

其中一些我只是出于绝望才最终为我的 docker 映像找到正确的校验和,但我找不到正确的校验和。由于层数的关系,我唯一没有尝试过的是遍历所有层,以防它们以随机顺序排列。但是一开始就这样放它们是没有意义的。

当我在派生映像的Dockerfile目录中运行docker build -t <some name> .时看到的错误是:

Step 1/7 : FROM name@sha256:<checksum> repository name not found: does not exist or no pull access

信息

  • Docker 版本:Docker version 17.05.0-ce, build 89658be(通过docker --version获得)
  • docker info 的输出:

    Containers: 0
     Running: 0
     Paused: 0
     Stopped: 0
    Images: 3841
    Server Version: 17.05.0-ce
    Storage Driver: aufs
     Root Dir: /var/lib/docker/aufs
     Backing Filesystem: extfs
     Dirs: 2620
     Dirperm1 Supported: true
    Logging Driver: json-file
    Cgroup Driver: cgroupfs
    Plugins: 
     Volume: local
     Network: bridge host macvlan null overlay
    Swarm: inactive
    Runtimes: runc
    Default Runtime: runc
    Init Binary: docker-init
    containerd version: 9048e5e50717ea4497b757314bad98ea3763c145
    runc version: 9c2d8d184e5da67c95d601382adf14862e4f2228
    init version: 949e6fa
    Security Options:
     apparmor
     seccomp
      Profile: default
    Kernel Version: 4.4.0-78-generic
    Operating System: Ubuntu 16.04.2 LTS
    OSType: linux
    Architecture: x86_64
    CPUs: 4
    Total Memory: 7.684GiB
    Name: xiaolong-hp-pavilion
    ID: QCJS:JPK4:KC7J:6MYF:WWCA:XQM2:7AF7:HWWI:BRZK:GT6B:D2NP:OJFS
    Docker Root Dir: /var/lib/docker
    Debug Mode (client): false
    Debug Mode (server): false
    Registry: https://index.docker.io/v1/
    Experimental: false
    Insecure Registries:
     127.0.0.0/8
    Live Restore Enabled: false
    
    WARNING: No swap limit support
    

【问题讨论】:

    标签: docker sha256 docker-image


    【解决方案1】:

    docker 在FROM 行中寻找的校验和来自注册服务器。在检查输出中,您将在 RepoDigest 部分看到:

    docker inspect -f '{{.RepoDigests}}' $image_name
    

    如果您没有将此图像推送到注册服务器,那么您将无法使用此哈希值。

    例如:

    $ docker inspect -f '{{.RepoDigests}}' busybox:latest
    [busybox@sha256:32f093055929dbc23dec4d03e09dfe971f5973a9ca5cf059cbfb644c206aa83f]
    
    $ cat df.testsha
    FROM busybox@sha256:32f093055929dbc23dec4d03e09dfe971f5973a9ca5cf059cbfb644c206aa83f
    CMD echo "hello world"
    
    $ docker build -f df.testsha -t test-sha .
    Sending build context to Docker daemon  23.35MB
    Step 1/2 : FROM busybox@sha256:32f093055929dbc23dec4d03e09dfe971f5973a9ca5cf059cbfb644c206aa83f
     ---> 00f017a8c2a6
    Step 2/2 : CMD echo "hello world"
     ---> Running in c516e5b6a694
     ---> 68dc47866183
    Removing intermediate container c516e5b6a694
    Successfully built 68dc47866183
    Successfully tagged test-sha:latest
    
    $ docker run --rm test-sha
    hello world
    

    【讨论】:

    • 我不明白为什么有人会排除这种可能性。是否有其他方法可以确保我从正确的图像中获取?
    • 我不知道。目的是让镜像能够可靠地构建在不同的主机上,并且知道它们具有相同的镜像。在主机之间移动图像的 docker 方式是使用注册表。 Docker Hub 是一个注册表,或者您可以使用注册表 docker 映像(在 hub 上可用)运行您自己的私有注册表。
    • 我想我会接受这个答案。我似乎来自一个错误的假设(我可以对本地构建的非注册表图像使用 sha256 校验和)。
    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 2021-04-01
    • 2020-10-06
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    相关资源
    最近更新 更多