Docker, wie man den Repository-Namen ändert oder das Image umbenennt?

568

Ich versuche, den Repository-Namen des Bildes zu ändern:

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

Daher möchte ich den Namen serverin etwas ändern wie myname/server:

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

Wie kann ich das machen?

Timur Fayzrakhmanov
quelle
5
Was ist der Unterschied zwischen REPOSITORY und TAG?
Charlie Parker
@CharlieParker TAG wird normalerweise für die Version des Repositorys verwendet - z. B. Repository Mariadb mit Tag 10.1
Ian Hunter
Befolgen Sie die Syntax vom Docker-Tag --help cmd unten:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
anandchaugule
Ich möchte die Änderung des gesamten Repository-Namens in Dockerhub .. Schade, dass nicht möglich ist :(
Gefahr89

Antworten:

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

oder

docker image tag d583c3ac45fd myname/server:latest

Tags sind nur für Menschen lesbare Aliase für den vollständigen Bildnamen ( d583c3ac45fd...).

Sie können also so viele davon mit demselben Bild verknüpfen, wie Sie möchten. Wenn Ihnen der alte Name nicht gefällt, können Sie ihn entfernen, nachdem Sie ihn erneut markiert haben:

docker rmi server

Das wird nur die entfernen alias/tag. Da d583c3ac45fdes andere Namen hat, wird das eigentliche Bild nicht gelöscht.

Andy
quelle
das funktioniert bei mir nicht Wenn ich das Docker-Tag myname / server ausführe: Das neueste Docker hält es für angebracht, docker.io voranzustellen, sodass das Image-Tag docker.io/myname/server:latest lautet.
Scott
Was ist Ihr Host-Betriebssystem und Ihre Docker-Version? Ich vermute, dass etwas an Ihrer Docker-Installation die Tag-Anweisung ändert.
Andy
25
Ich finde auch, dass das Weglassen :latestin Ordnung ist, wenn nur ein Tag für den Bildnamen auf dem Spiel steht. Es ist jedoch sehr eigenwillig, dass der Bildname REPOSITORYin der Ausgabe von (und nicht als Bild) bezeichnet wird, docker imageswährend er mit einem Befehl namens "while" umbenannt werden muss, tagwährend TAGin dieser Ausgabe eine separate Spalte vorhanden ist. Ich hoffe, sie
räumen
Beachten Sie, dass Sie wahrscheinlich docker image tag from_server:version to_server:versionwie hier beschrieben möchten : docs.docker.com/engine/reference/commandline/image_tag
Traveller
20

Als Abkürzung können Sie laufen:

docker tag d58 myname/server:latest

Wobei d58die ersten 3 Zeichen der BILD-ID stehen, in diesem Fall ist das alles, was Sie brauchen.

Schließlich können Sie das alte Bild wie folgt entfernen:

docker rmi server
Mwiza
quelle
1
In meinem Fall hängt die Verwendung der vollständigen ID irgendwie an: spätestens bis zum Ende und gibt einen Fehler aus, der besagt, dass sie nicht gefunden werden konnte. Die ersten 3 Buchstaben funktionieren viel besser. (dh docker tag d583c3ac45fd myname/server:latestfunktioniert nicht, während docker tag d58 myname/server:latestfunktioniert.)
John Hamilton
8

Vor kurzem musste ich einige Bilder aus der Docker-Registrierung (docker.mycompany.com) nach Artifactory (docker.artifactory.mycompany.com) migrieren.

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
quelle
6
docker tag CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME
Huiguorou
quelle
2
Sicher, das wird funktionieren, aber Sie haben dieser Person nicht erklärt, warum. Sie scheinen verwirrt darüber zu sein, was ein Docker-Tag ist ... Vorausgesetzt, sie wussten, wie man Docker -h verwendet
Adam Kaplan
1

Die akzeptierte Antwort eignet sich hervorragend für einzelne Umbenennungen. Hier finden Sie jedoch eine Möglichkeit, mehrere Bilder mit demselben Repository gleichzeitig umzubenennen (und die alten Bilder zu entfernen).

Wenn Sie alte Bilder des Formulars haben:

$ 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

Und du willst:

new_name/image_name_1
new_name/image_name_2

Dann können Sie diese ( die Haftung verbessernde in Verwendung OLD_REPONAME, NEW_REPONAMEund je TAGnach Bedarf):

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

Aszendenten
quelle
-7

Docker run -it --name NEW_NAME Bestehender_Name

So ändern Sie den vorhandenen Bildnamen.

Jay Patel
quelle
5
Dadurch wird ein Container mit dem neuen Namen erstellt. Es passiert nichts , mit dem Bildnamen.
Jwodder