Docker 中如何修改镜像名(仓库名)或容器名?

镜像改名用 docker tag 旧名 新名(加别名,再 docker rmi 旧名删除别名);容器改名用 docker rename。本文说明名称与 ID 的关系及常见操作。

最佳实践
Docker 中如何修改镜像名(仓库名)或容器名?封面

做法:镜像没有真正的"重命名",用 docker tag 旧名:标签 新名:标签 给同一镜像加一个新名字(别名),再用 docker rmi 旧名 删掉旧别名——镜像数据(ID)不变;容器改名直接 docker rename 旧名 新名,即时生效、不影响运行。

镜像改名:tag + rmi

镜像名只是指向镜像 ID(如 d583c3ac45fd)的别名,一个镜像可以有任意多个名字:

# 加新名
docker tag myapp:1.0 registry.example.com/team/myapp:1.0

# 确认两个名字指向同一 ID
docker images | grep myapp

# 删掉旧名(只是删别名,镜像还在)
docker rmi myapp:1.0

按名称删除可能仅移除标签;删除最后引用时也可能移除镜像及不再共享的层,具体受容器、其他标签和缓存引用约束。

典型用途

  • 推送私有仓库前:docker tag myapp:1.0 registry.example.com/team/myapp:1.0 && docker push ...
  • 规范命名:把随手起的 test123 改成规范的 team/service:版本
  • latest 指针调整:docker tag myapp:1.2 myapp:latest 直接更新 latest 指向,不要随后删除这个刚更新的标签

容器改名:rename

docker rename old_name new_name

运行中也能改,进程无感知。compose 管理的容器不建议手改(手工改名不会更新 Compose 配置或其他依赖,后续 up 的行为还取决于项目标签和配置变化)。

常见问题(FAQ)

Q:docker tag 会复制一份镜像占双倍磁盘吗?
A:不会。tag 只是别名,分层数据共享,几乎不占额外空间。

Q:rmi 报 "image is being used by running container"?
A:有容器在用该镜像,先停删容器;或确认你只是想删标签——删标签在有容器引用时也会受限,可 -f 强制(谨慎)。

Q:仓库地址改变(迁 registry)怎么批量改名?
A:docker images --format '{{.Repository}}:{{.Tag}}' | grep old-registry | while read i; do docker tag $i ${i/old-registry/new-registry}; done

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台