Docker, ¿cómo cambiar el nombre del repositorio o cambiar el nombre de la imagen?

569

Estoy tratando de cambiar el nombre del repositorio de la imagen:

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
server              latest              d583c3ac45fd        26 minutes ago      685.5 MB

Por lo tanto, quiero cambiar el nombre servera algo como myname/server:

REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
myname/server       latest              d583c3ac45fd        26 minutes ago      685.5 MB

¿Cómo puedo hacer esto?

Timur Fayzrakhmanov
fuente
55
¿Cuál es la diferencia entre REPOSITORY y TAG?
Charlie Parker
@CharlieParker TAG se usa típicamente para la versión del repositorio, por ejemplo, repositorio mariadb con etiqueta 10.1
Ian Hunter
Siga la sintaxis de la etiqueta del docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
acoplador
Me gustaría cambiar el nombre completo del repositorio en dockerhub ... lástima que no sea posible :(
danger89

Respuestas:

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

o

docker image tag d583c3ac45fd myname/server:latest

Las etiquetas son solo alias legibles por humanos para el nombre completo de la imagen ( d583c3ac45fd...).

Por lo tanto, puede tener tantos de ellos asociados con la misma imagen como desee. Si no le gusta el nombre anterior, puede eliminarlo una vez que lo haya vuelto a etiquetar:

docker rmi server

Eso solo eliminará el alias/tag. Como d583c3ac45fdtiene otros nombres, la imagen real no se eliminará.

Andy
fuente
Esto no funciona para mí. Cuando ejecuto la etiqueta docker myname / server: la última ventana acoplable es adecuada para anteponer docker.io, por lo que la etiqueta de la imagen termina siendo docker.io/myname/server:latest.
Scott
¿Cuál es su sistema operativo host y la versión de Docker? Sospecho que algo sobre su instalación de Docker está modificando la instrucción de etiqueta.
Andy
25
También encuentro que omitir :latestestá bien si solo hay una etiqueta para el nombre de la imagen en juego. Pero es bastante idiosincrásico que el nombre de la imagen se llame REPOSITORY(y no una imagen) en la salida de, docker imagesmientras que debe cambiar su nombre con un comando llamado, tagmientras que TAGhay una columna separada en esa salida. Espero que limpien esta y otras cosas relacionadas ...
matanster
Tenga en cuenta que probablemente desee, docker image tag from_server:version to_server:versiontal como se describe aquí: docs.docker.com/engine/reference/commandline/image_tag
Traveler
20

Como taquigrafía puedes ejecutar:

docker tag d58 myname/server:latest

Donde d58representa los primeros 3 caracteres de la ID de IMAGEN, en este caso, eso es todo lo que necesita.

Finalmente, puede eliminar la imagen anterior de la siguiente manera:

docker rmi server
Mwiza
fuente
1
En mi caso, el uso de la identificación completa de alguna manera agrega: lo último hasta el final y da un error alegando que no pudo encontrarlo. Las primeras 3 letras funcionan mucho mejor. (es decir docker tag d583c3ac45fd myname/server:latest, no funciona mientras que docker tag d58 myname/server:latestfunciona.)
John Hamilton
8

Recientemente tuve que migrar algunas imágenes del registro de Docker (docker.mycompany.com) a 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
anthavio
fuente
6
docker tag CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME
Huiguorou
fuente
2
Claro, esto funcionará, pero no le has explicado a esta persona por qué. Parecen estar confundidos acerca de lo que es una etiqueta Docker ... Suponiendo que supieran cómo usar docker -h
Adam Kaplan
1

La respuesta aceptada es excelente para los nombres únicos, pero aquí hay una manera de cambiar el nombre de varias imágenes que tienen el mismo repositorio a la vez (y eliminar las imágenes antiguas).

Si tiene imágenes antiguas del formulario:

$ 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

Y tu quieres:

new_name/image_name_1
new_name/image_name_2

A continuación, puede utilizar este (sustituía en OLD_REPONAME, NEW_REPONAMEy TAGen su caso):

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

antepasados
fuente
0

Para cambiar el nombre de una imagen, le da una nueva etiqueta y luego elimina la antigua con el comando 'rmi':

$ docker tag $ docker rmi

Este segundo paso da miedo, ya que 'rmi' significa "eliminar imagen". Sin embargo, Docker no eliminará la imagen si tiene otras etiquetas. Es decir, si tuviera que seguir esto inmediatamente con: docker rmi, entonces realmente eliminaría la imagen (suponiendo que no haya otras etiquetas asignadas a la imagen)

Jasmeet Singh
fuente
-7

docker run -it --name NEW_NAME Existing_name

Para cambiar el nombre de la imagen existente.

Jay Patel
fuente
66
Eso crea un contenedor con el nuevo nombre. No pasa nada con el nombre de la imagen .
jwodder