Docker comment changer le nom du référentiel ou renommer l'image?

569

J'essaie de changer le nom du référentiel de l'image:

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

Par conséquent, je veux changer le nom serveren quelque chose comme myname/server:

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

Comment puis-je faire ceci?

Timur Fayzrakhmanov
la source
5
quelle est la difference entre REPOSITORY et TAG?
Charlie Parker
@CharlieParker TAG est généralement utilisé pour la version du référentiel - par exemple, le référentiel mariadb avec la balise 10.1
Ian Hunter
Suivez la syntaxe de la balise docker --help cmd ci-dessous:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
anandchaugule
Je voudrais changer le nom du référentiel entier dans dockerhub .. dommage que ce ne soit pas possible :(
danger89

Réponses:

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

ou

docker image tag d583c3ac45fd myname/server:latest

Les balises ne sont que des alias lisibles par l'homme pour le nom complet de l'image ( d583c3ac45fd...).

Vous pouvez donc en associer autant que vous le souhaitez à la même image. Si vous n'aimez pas l'ancien nom, vous pouvez le supprimer après l'avoir redéfini:

docker rmi server

Cela supprimera simplement le fichier alias/tag. Puisqu'il d583c3ac45fda d'autres noms, l'image réelle ne sera pas supprimée.

Andy
la source
ça ne marche pas pour moi. Lorsque j'exécute la balise docker myname / server: le dernier docker juge approprié de préfixer docker.io, de sorte que la balise image finit par être docker.io/myname/server:latest.
Scott
Quelle est votre OS hôte et votre version Docker? Je soupçonne que quelque chose dans votre installation Docker modifie l'instruction de balise.
Andy
25
Je trouve également que l'omission :latestest bonne s'il n'y a qu'une seule balise pour le nom de l'image en jeu. Mais il est assez idiosyncratique que le nom de l'image soit appelé a REPOSITORY(et non une image) dans la sortie de docker imagesalors qu'il doit être renommé avec une commande appelée tagalors qu'il TAGs'agit d'une colonne distincte dans cette sortie. J'espère qu'ils nettoient ceci et d'autres choses liées ...
matanster
Notez que vous voulez probablement docker image tag from_server:version to_server:versioncomme décrit ici: docs.docker.com/engine/reference/commandline/image_tag
Traveler
20

En raccourci, vous pouvez exécuter:

docker tag d58 myname/server:latest

d58représente les 3 premiers caractères de l'ID IMAGE, dans ce cas, c'est tout ce dont vous avez besoin.

Enfin, vous pouvez supprimer l'ancienne image comme suit:

docker rmi server
Mwiza
la source
1
Dans mon cas, l'utilisation de l'ID complet s'ajoute en quelque sorte: le dernier à la fin et donne une erreur affirmant qu'il n'a pas pu le trouver. Les 3 premières lettres fonctionnent beaucoup mieux. (c.-à docker tag d583c3ac45fd myname/server:latest-d. ne fonctionne pas alors qu'il docker tag d58 myname/server:latestfonctionne.)
John Hamilton
8

Récemment, j'ai dû migrer certaines images du registre Docker (docker.mycompany.com) vers 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
la source
6
docker tag CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME
Huiguorou
la source
2
Bien sûr, cela fonctionnera, mais vous n'avez pas expliqué à cette personne pourquoi. Ils semblent confus sur ce qu'est une balise Docker ... En supposant qu'ils savaient comment utiliser docker -h
Adam Kaplan
1

La réponse acceptée est idéale pour les renommages uniques, mais voici un moyen de renommer plusieurs images qui ont le même référentiel à la fois (et de supprimer les anciennes images).

Si vous avez d'anciennes images du formulaire:

$ 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

Et tu veux:

new_name/image_name_1
new_name/image_name_2

Ensuite , vous pouvez utiliser (substratum dans OLD_REPONAME, NEW_REPONAMEet TAGle cas échéant):

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

ascendants
la source
0

Pour renommer une image, vous lui donnez une nouvelle balise, puis supprimez l'ancienne balise à l'aide de la commande «rmi»:

$ docker tag $ docker rmi

Cette deuxième étape est effrayante, car «rmi» signifie «supprimer l'image». Cependant, docker ne supprimera pas réellement l'image s'il a d'autres balises. Autrement dit, si vous deviez suivre immédiatement ceci avec: docker rmi, cela supprimerait en fait l'image (en supposant qu'aucune autre balise n'est affectée à l'image)

Jasmeet Singh
la source
-7

docker run -it --name NEW_NAME Existing_name

Pour modifier le nom de l'image existante.

Jay Patel
la source
6
Cela crée un conteneur avec le nouveau nom. Rien ne se passe avec le nom de l' image .
jwodder