我正在尝试更改图像的存储库名称:

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
server              latest              d583c3ac45fd        26 minutes ago      685.5 MB

因此,我想将名称服务器更改为类似myname/server的名称:

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
myname/server       latest              d583c3ac45fd        26 minutes ago      685.5 MB

我该怎么做?


当前回答

作为速记,您可以运行:

docker tag d58 myname/server:latest

其中d58表示IMAGE ID的前3个字符,在本例中,这就是您所需要的。

最后,您可以删除旧图像,如下所示:

docker rmi server

其他回答

截至2022年,没有一个顶级答案真正明确地说明了某人如何能够轻松地“重命名”给定存储库的每个标签,以便将一个存储库的标签迁移到另一个存储。Bensuprac的回答让我找到了这个oneliner,它帮助我将GitLab注册迁移到Quay。

首先,如果需要,您可以使用以下命令一次拉取所有图像:

docker pull oldregistry.example.com/my-image --all-tags

单线图:

docker image list oldregistry.example.com/my-image --format "{{.Tag}}" | xargs -r -P$(nproc) -I {} docker image tag oldregistry.example.com/my-image:{} newregistry.example.com/my-image:{}

最后:

docker push newregistry.example.com/my-image --all-tags

如果需要,不要忘记在pull/push命令之前使用docker登录。

docker image tag server:latest myname/server:latest

or

docker image tag d583c3ac45fd myname/server:latest

标签只是完整图像名称(d583c3ac45fd…)的人类可读别名。

因此,您可以根据自己的喜好将它们中的任意多个与同一图像关联。如果您不喜欢旧名称,可以在重新标记后将其删除:

docker rmi server

这只会删除别名/标记。由于d583c3ac45fd具有其他名称,因此不会删除实际图像。

作为速记,您可以运行:

docker tag d58 myname/server:latest

其中d58表示IMAGE ID的前3个字符,在本例中,这就是您所需要的。

最后,您可以删除旧图像,如下所示:

docker rmi server

下面的python代码重命名多个图像,然后推回到新的存储库。这是一个用python3.6编写的docker存储库迁移代码

import docker
client = docker.from_env()
docker_api = docker.APIClient()
images = client.images.list()
for image in images:
    try:
        if image.tags[0] and '<old repository>' in image.tags[0]: 
            version = image.tags[0].split("/")[-1]
            type(version)
            print("version is {}".format(version))
            docker_api.tag(image.tags[0],"<new repository>/{}".format(version))
    except Exception as Ex:
        print(image)
        print(Ex)

然后通过下面的shell脚本推送图像

docker images | grep <new repository> | awk '{print $1":"$2}' | xargs -L1 docker push

根据码头工人文件https://docs.docker.com/engine/reference/commandline/rename/

docker rename CONTAINER NEW_NAME