757

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

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

因此,我想将名称更改servermyname/server

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

我怎样才能做到这一点?

4

12 回答 12

1354
docker image tag server:latest myname/server:latest

或者

docker image tag d583c3ac45fd myname/server:latest

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

因此,您可以根据需要将尽可能多的它们与相同的图像相关联。如果您不喜欢旧名称,可以在重新标记后将其删除:

docker rmi server

那只会删除alias/tag. 由于d583c3ac45fd有其他名称,实际图像不会被删除。

于 2014-08-09T00:50:30.450 回答
36

作为速记,您可以运行:

docker tag d58 myname/server:latest

whered58代表 IMAGE ID 的前 3 个字符,在这种情况下,这就是您所需要的。

最后,您可以按如下方式删除旧图像:

docker rmi server
于 2017-06-24T23:36:33.120 回答
20

最近我不得不将一些图像从 Docker 注册表 (docker.mycompany.com) 迁移到 Artifactory (docker.artifactory.mycompany.com)

docker pull docker.mycompany.com/something/redis:4.0.10
docker tag docker.mycompany.com/something/redis:4.0.10 docker.artifactory.mycompany.com/something/redis:4.0.10
docker push docker.artifactory.mycompany.com/something/redis:4.0.10
于 2019-04-10T17:27:54.090 回答
14
docker tag CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME
于 2018-06-29T03:10:23.617 回答
9

由于 Docker 不提供镜像重命名功能,以下是如何通过三个命令有效地重命名 docker 镜像:

docker pull UglyOldTag
docker tag  UglyOldTag ShinyNewTag
docker rmi  UglyOldTag

注意:这实际上只是添加一个新标签并删除旧标签。如上所述,标签实际上只是一个助记别名或指向图像 ID 字段的指针。如果这还不够令人困惑,Docker API 和文档也经常使用“ tag ”来指代版本(即“ : ”之后的图像名称部分,如在 MyImage**:**latest 中) .

但是,拼写错误和错误的名称并不是您可能想要重命名标签的唯一地方。例如,如果您使用 Amazon 的 ECR,则在签入图像之前,您需要将完整的 ARN 分配为标签。这意味着您的标签又大又丑!

注意:当您查看下面的示例时,记住 Amazon 和 DockerHub 将 docker 映像的每个层次结构称为“存储库”是很有用的。

# Create the ECR 'repository' for the image 
aws ecr create-repository \
    --repository-name myFavoriteTag \
    --image-scanning-configuration scanOnPush=true \
    --region myFavoriteRegion
docker tag myFavoriteTag:latest aws_account_id.dkr.ecr.aws_region.amazonaws.com/myFavoriteTag:latest
docker push aws_account_id.dkr.ecr.aws_region.amazonaws.com/myFavoriteTag:latest

所以,一个快速清理丑陋的方法是

ECR_BASE==aws_account_id.dkr.ecr.aws_region.amazonaws.com
docker pull ${ECR_BASE}/myFavoriteTag
docker tag  ${ECR_BASE}/myFavoriteTag myFavoriteTag
docker rmi  ${ECR_BASE}/myFavoriteTag
docker run myFavoriteTag

当然,要重新检查到 ECR,你必须把丑陋的东西放回去

docker tag ${ECR_BASE}/myFavoriteTag:latest
于 2021-04-15T21:15:25.847 回答
2

接受的答案非常适合单个重命名,但这是一种同时重命名具有相同存储库的多个图像的方法(并删除旧图像)。

如果您有表格的旧图像:

$ docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
old_name/image_name_1    latest              abcdefghijk1        5 minutes ago      1.00GB
old_name/image_name_2    latest              abcdefghijk2        5 minutes ago      1.00GB

你想要:

new_name/image_name_1
new_name/image_name_2

然后您可以使用它(在OLD_REPONAMENEW_REPONAMETAG适当的情况下替换):

OLD_REPONAME='old_name'
NEW_REPONAME='new_name'
TAG='latest'

# extract image name, e.g. "old_name/image_name_1"
for image in $(docker images | awk '{ if( FNR>1 ) { print $1 } }' | grep $OLD_REPONAME)
do \
  OLD_NAME="${image}:${TAG}" && \
  NEW_NAME="${NEW_REPONAME}${image:${#OLD_REPONAME}:${#image}}:${TAG}" && \
  docker image tag $OLD_NAME $NEW_NAME && \
  docker rmi $image:${TAG}  # omit this line if you want to keep the old image
done

于 2020-05-02T18:47:39.907 回答
2
docker image tag #imageId myname/server:latest

这对我有用

于 2021-02-03T05:45:18.880 回答
1

下面的 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
于 2021-05-18T06:10:42.577 回答
0

如何重命名图像?

要复制图像或重命名现有图像,您只需从现有标签或存储库创建一个新标签或存储库。您可以使用docker tag命令执行此操作。


syntax/command:  docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

#=> docker images
REPOSITORY                    TAG                   IMAGE ID       CREATED        SIZE
ubuntu-git                    latest                c0aaaba33a60   18 hours ago   208MB

docker tag ubuntu-git:latest ubuntu-git:latest-new-tag

#=> docker images
REPOSITORY                    TAG                   IMAGE ID       CREATED        SIZE
ubuntu-git                    latest                c0aaaba33a60   18 hours ago   208MB
ubuntu-git                    latest-new-tag        c0aaaba33a60   18 hours ago   208MB 
于 2022-03-04T06:01:13.747 回答
-1

要重命名图像,请给它一个新标签,然后使用“rmi”命令删除旧标签:

$ 码头工人标签 $ 码头工人 rmi

这第二步很吓人,因为“rmi”的意思是“删除图像”。但是,如果图像有任何其他标签,docker 不会真正删除它。也就是说,如果您要立即使用: docker rmi ,那么它实际上会删除图像(假设没有为图像分配其他标签)

于 2020-06-11T18:14:38.573 回答
-1

您可以使用以下命令更改多个 repos/tag 标签:

docker images --filter=reference='server' --format='{{.Repository}}:{{.Tag}}' | xargs -r -P$(nproc) -I {} docker image tag {} myname/{}
于 2021-06-28T07:00:57.887 回答
-4

根据 docker 文档 https://docs.docker.com/engine/reference/commandline/rename/

docker rename CONTAINER NEW_NAME
于 2020-11-04T20:51:36.010 回答