比较 Docker 个标签

Comparing Docker Tags

假设我像这样构建和标记图像:

docker build -t foo:bar .
docker tag foo:bar foo:baz

我以后怎么确认这两个标签指的是不是同一个东西?我希望能够通过注册表 API (v2) 执行此操作,因为我可能在本地没有两个图像。

一种(乏味?)方法包括比较每个标签附加的清单文件中注册的 fsLayers

下载http://your-registry/v2/repo/image/manifests/tag1 and http://your-registry/v2/repo/image/manifests/tag2:

{
    "name": "repo/image",
    "tag": "tag1",
    "architecture": "amd64",
    "fsLayers": [{
        "blobSum": "sha256:d7958e841d1f103cc24e45cb6108eaf09ecf0b424f071ac6b6ab39241cec293d"
    }, {
        "blobSum": "sha256:d7958e841d1f103cc24e45cb6108eaf09ecf0b424f071ac6b6ab39241cec293d"
    }, {
        "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
    }],
    "history": [
        (...)
    ],
    "schemaVersion": 1,
    "signatures": [{
        "header": { (...) },
        "signature": "PwuBjXLvQE_DtF29YtyJF2N-zHkVGRh93It4zxL1Igtoi093ykMvXBL_0J6E6-eQVeYrXm3IdDAll-922zeYzQ",
        "protected": "eyJmb3JtYXRMZW5ndGgiOjIwOTk0LCJmb3JtYXRUYWlsIjoiQ24wIiwidGltZSI6IjIwMTUtMTItMDdUMTM6NDE6MjJaIn0"
    }]
}

然后比较fsLayers数组。如果两个清单之间是相等的,那么基于这些标签中的任何一个构建容器都会得到相同的结果(即它们指向相同的东西)。

如果您在本地有图像,比较 imageId(通过每个标签的 docker inspect)就足够了,也更容易。但是我不认为这个id可以从注册表中获取。