Docker如何更改存储库名称或重命名映像?


567

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

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

因此,我想将名称更改server为类似myname/server

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

我怎样才能做到这一点?


5
REPOSITORY和TAG有什么区别?
查理·帕克

@CharlieParker TAG通常用于版本库-例如,带有标签10.1的版本mariadb
Ian Hunter

请遵循以下docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker

我想在dockerhub中更改整个存储库名称..太糟糕了,这是不可能的:(
–anger89

Answers:


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

要么

docker image tag d583c3ac45fd myname/server:latest

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

因此,您可以根据需要使它们与同一图像关联。如果您不喜欢旧名称,则可以在重新命名后将其删除:

docker rmi server

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


这对我不起作用。当我运行docker标签myname / server:latest时,docker认为适合放置docker.io,因此图像标签最终为docker.io/myname/server:latest。
斯科特,

您的主机操作系统和Docker版本是什么?我怀疑有关您的Docker安装的某些内容正在修改标记指令。
安迪

25
我还发现,:latest如果仅危及图像名称的一个标签,则可以省略。但是,非常有意思的是,图像名称REPOSITORY在的输出中称为图像名称(而不是图像),docker images而它需要使用称为命令的命令重命名,tagTAG在该输出中是单独的列。我希望他们能清理这些和其他相关的东西...
matanster

请注意,您可能想要docker image tag from_server:version to_server:version按此处所述:docs.docker.com/engine/reference/commandline/image_tag
Traveler

20

作为简写,您可以运行:

docker tag d58 myname/server:latest

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

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

docker rmi server

1
在我的情况下,使用完整ID会以某种方式将:latest附加到末尾,并给出错误消息,声称找不到它。前三个字母效果更好。(即docker tag d583c3ac45fd myname/server:latest在工作时不起作用docker tag d58 myname/server:latest。)
John Hamilton

8

最近,我不得不将某些图像从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

6
docker tag CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME

2
当然可以,但是您尚未向此人解释原因。他们似乎对Docker标签是什么感到困惑...假设他们确实知道如何使用docker -h
Adam Kaplan,

1

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

如果您有以下格式的旧图片:

$ 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_REPONAME以及TAG如适用):

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.