我正在尝试更改图像的存储库名称:
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 image tag server:latest myname/server:latest
or
docker image tag d583c3ac45fd myname/server:latest
标签只是完整图像名称(d583c3ac45fd…)的人类可读别名。
因此,您可以根据自己的喜好将它们中的任意多个与同一图像关联。如果您不喜欢旧名称,可以在重新标记后将其删除:
docker rmi server
这只会删除别名/标记。由于d583c3ac45fd具有其他名称,因此不会删除实际图像。
截至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不提供图像重命名功能,以下是如何在三个命令中有效地重命名Docker图像:
docker pull UglyOldTag
docker tag UglyOldTag ShinyNewTag
docker rmi UglyOldTag
注意:这实际上只是添加一个新标签并删除旧标签。如上所述,标记实际上只是图像ID字段的助记符别名或指针。如果这还不够令人困惑的话,Docker API和文档也经常使用“标记”来指代版本(即图像名称中“:”后面的部分,如MyImage**:**最新版本)。
然而,拼写错误和错误的名称并不是唯一需要重命名标记的地方。例如,如果您使用的是亚马逊的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