您可以在远程存储库中标记 docker 镜像而不拉取它吗?

Jui*_*icy 6 docker

我偶尔需要对 docker 镜像进行一些手动升级。

我使用的流程是:

$ docker pull registry.digitalocean.com/foo/bar:dev-123
$ docker tag registry.digitalocean.com/foo/bar:dev-123 registry.digitalocean.com/foo/bar:prd-123
$ docker push registry.digitalocean.com/foo/bar:prd-123
Run Code Online (Sandbox Code Playgroud)

这涉及将图像拉到我的本地主机,在那里标记它,然后再次推送它。

在我看来,应该有一种方法可以在远程存储库中标记图像,而无需上述操作,但我在谷歌上找不到答案。

lar*_*sks 2

您可以使用skopeo来执行此操作,如下所示:

skopeo copy docker://some/image:oldtag docker://some/image:newtag
Run Code Online (Sandbox Code Playgroud)

例如,如果我有:

$ skopeo list-tags docker://larsks/skopeo-example
{
    "Repository": "docker.io/larsks/skopeo-example",
    "Tags": [
        "latest"
    ]
}
Run Code Online (Sandbox Code Playgroud)

我可以跑:

$ skopeo copy docker://larsks/skopeo-example:latest docker://larsks/skopeo-example:newtag
Getting image source signatures
Copying blob df20fa9351a1 skipped: already exists
Copying config 0bce593a08 [--------------------------------------] 0.0b / 741.0b
Writing manifest to image destination
Storing signatures
Run Code Online (Sandbox Code Playgroud)

现在我有:

$ skopeo list-tags docker://larsks/skopeo-example
{
    "Repository": "docker.io/larsks/skopeo-example",
    "Tags": [
        "latest",
        "newtag"
    ]
}
Run Code Online (Sandbox Code Playgroud)