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

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标记命令执行此操作。


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 

其他回答

docker image tag #imageId myname/server:latest

这对我有用

对于单个重命名来说,公认的答案很好,但这里有一种方法可以同时重命名具有相同存储库的多个图像(并删除旧图像)。

如果您有表单的旧图像:

$ 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_REPONAME、NEW_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

作为速记,您可以运行:

docker tag d58 myname/server:latest

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

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

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

or

docker image tag d583c3ac45fd myname/server:latest

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

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

docker rmi server

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

docker tag CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME