我试图更改图片的存储库名称:
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
我该怎么做?
答案 0 :(得分:846)
docker tag server:latest myname/server:latest
或
docker tag d583c3ac45fd myname/server:latest
标签只是完整图像名称(d583c3ac45fd...
)的人类可读别名。
因此,您可以根据需要将同一图像关联起来。如果您不喜欢旧名称,则可以在重新标记后将其删除:
docker rmi server
那将删除alias/tag
。由于d583c3ac45fd
有其他名称,因此实际图片不会被删除。
答案 1 :(得分:12)
作为速记,您可以运行:
docker tag d58 myname/server:latest
d58
代表IMAGE ID的前3个字符,在这种情况下,这就是您所需要的。
最后,您可以删除旧图像,如下所示:
docker rmi server
答案 2 :(得分:3)
由于 Docker 不提供镜像重命名功能,以下是如何通过三个命令有效重命名 docker 镜像:
docker pull UglyOldTag
docker tag UglyOldTag ShinyNewTag
docker rmi UglyOldTag
注意:这实际上只是添加一个新标签并删除旧标签。如上所述,标签实际上只是一个助记别名,或一个指向图像 ID 字段的指针。如果这还不够混乱,Docker API 和文档还经常使用“标签”来指代版本(即在“:”,如在 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
答案 3 :(得分:2)
docker标签CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME
答案 4 :(得分: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_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
答案 5 :(得分:0)
最近我不得不将某些映像从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 :(得分:0)
要重命名图片,请为其赋予新标签,然后使用“ rmi”命令删除旧标签:
$ docker标签 $ docker rmi
第二步很可怕,因为“ rmi”表示“删除图像”。但是,泊坞窗实际上不会删除具有其他标签的图像。也就是说,如果您要立即使用docker rmi跟随它,那么它将实际上删除该图像(假设没有其他标签分配给该图像)
答案 7 :(得分:0)
docker image tag #imageId myname/server:latest
这对我有用
答案 8 :(得分:0)
下面的 python 代码重命名多个图像,然后推回到新的存储库。这是一个用python3.6编写的docker仓库迁移代码
client = docker.from_env()
docker_api = docker.APIClient()
images = client.images.list()
for image in images:
try:
if image.tags[0] and '<image you want to rename>' 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)
and then push images by below shell script
docker images | grep <new repository> | awk '{print $1":"$2}' | xargs -L1 docker push
答案 9 :(得分:0)
您可以使用此命令更改多个 repos/tag 标签:
docker images --filter=reference='server' --format='{{.Repository}}:{{.Tag}}' | xargs -r -P$(nproc) -I {} docker image tag {} myname/{}
答案 10 :(得分:-1)
根据docker文档 https://docs.docker.com/engine/reference/commandline/rename/
docker rename CONTAINER NEW_NAME
答案 11 :(得分:-3)
docker run -it --name NEW_NAME Existing_name
更改现有图像名称。