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

Tim*_*nov 515 docker linux-containers

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

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
server              latest              d583c3ac45fd        26 minutes ago      685.5 MB
Run Code Online (Sandbox Code Playgroud)

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

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
myname/server       latest              d583c3ac45fd        26 minutes ago      685.5 MB
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

And*_*ndy 941

docker tag server:latest myname/server:latest
Run Code Online (Sandbox Code Playgroud)

要么

docker tag d583c3ac45fd myname/server:latest
Run Code Online (Sandbox Code Playgroud)

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

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

docker rmi server
Run Code Online (Sandbox Code Playgroud)

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

  • 我还发现,如果图像名称只有一个标签,那么省略`:latest`就可以了.但是,在"docker images"的输出中,图像名称被称为"REPOSITORY"(而不是图像)是非常特殊的,而需要使用名为"tag"的命令重命名,而"TAG"是一个单独的列.在那个输出中.我希望他们清理这个和其他相关的东西...... (23认同)

Mwi*_*iza 16

作为简写,你可以运行:

docker tag d58 myname/server:latest
Run Code Online (Sandbox Code Playgroud)

Where d58代表IMAGE ID的前3个字符,在这种情况下,这就是你所需要的.

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

docker rmi server
Run Code Online (Sandbox Code Playgroud)


A. *_*ick 16

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

docker pull UglyOldTag
docker tag  UglyOldTag ShinyNewTag
docker rmi  UglyOldTag
Run Code Online (Sandbox Code Playgroud)

注意:这实际上只是添加新标签并删除旧标签。如上所述,标签实际上只是一个助记符别名,或者说是指向图像 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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

当然,要将其重新检查到 ECR 中,您必须将丑陋的内容重新放回原处

docker tag ${ECR_BASE}/myFavoriteTag:latest
Run Code Online (Sandbox Code Playgroud)


ant*_*vio 15

最近我不得不将一些镜像从 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
Run Code Online (Sandbox Code Playgroud)


小智 10

docker tag CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME
Run Code Online (Sandbox Code Playgroud)

  • 当然,这会奏效,但你还没有向这个人解释原因。他们似乎对 Docker 标签是什么感到困惑......假设他们确实知道如何使用 docker -h (3认同)

Dee*_*hta 9

简单的

使用以下命令更改图像名称(或存储库名称)IMAGE ID

docker tag <IMAGE ID> <NAME YOU WANT TO GIVE>