Doker jak zmienić nazwę repozytorium lub zmienić nazwę obrazu?

568

Próbuję zmienić nazwę repozytorium obrazu:

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

Dlatego chcę zmienić nazwę serverna coś takiego myname/server:

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

W jaki sposób mogę to zrobić?

Timur Fajzrakhmanov
źródło
5
Jaka jest różnica między REPOSITORY a TAG?
Charlie Parker,
@CharlieParker TAG jest zwykle używany do wersji repozytorium - np. Mariadb repozytorium z tagiem 10.1
Ian Hunter
Postępuj zgodnie ze składnią ze znacznika docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
dokowania
Chciałbym zmienić całą nazwę repozytorium w dockerhub .. szkoda, że ​​nie jest to możliwe :(
niebezpieczeństwo89

Odpowiedzi:

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

lub

docker image tag d583c3ac45fd myname/server:latest

Tagi to tylko czytelne dla człowieka aliasy pełnej nazwy obrazu ( d583c3ac45fd...).

Możesz więc powiązać dowolną ich liczbę z tym samym obrazem. Jeśli nie podoba ci się stara nazwa, możesz ją usunąć po jej oznaczeniu:

docker rmi server

To po prostu usunie alias/tag. Ponieważ d583c3ac45fdma inne nazwy, rzeczywisty obraz nie zostanie usunięty.

Andy
źródło
to nie działa dla mnie. Po uruchomieniu myname / server znacznika dokowania: najnowszy doker uzna za stosowne, aby wstawić plik docker.io, więc tag obrazu kończy się na docker.io/myname/server:latest.
Scott,
Jaki jest twój system operacyjny i wersja Dockera? Podejrzewam, że coś w twojej instalacji Dockera modyfikuje instrukcję tagu.
Andy
25
Uważam również, że pomijanie :latestjest w porządku, jeśli w grę wchodzi tylko jeden tag dla nazwy obrazu. Ale bardzo charakterystyczne jest to, że nazwa REPOSITORYobrazu na wyjściu jest nazywana (a nie obrazem), docker imagespodczas gdy należy zmienić jego nazwę za pomocą polecenia o nazwie, tagpodczas gdy TAGjest to osobna kolumna na tym wyjściu. Mam nadzieję, że posprzątają to i inne powiązane rzeczy ...
Matanster
Zauważ, że prawdopodobnie chcesz, docker image tag from_server:version to_server:versionjak opisano tutaj: docs.docker.com/engine/reference/commandline/image_tag
Traveler
20

Stenogramem możesz biegać:

docker tag d58 myname/server:latest

Gdzie d58reprezentuje pierwsze 3 znaki identyfikatora obrazu, w tym przypadku to wszystko, czego potrzebujesz.

Na koniec możesz usunąć stary obraz w następujący sposób:

docker rmi server
Mwiza
źródło
1
W moim przypadku użycie pełnego identyfikatora w jakiś sposób dołącza: ostatni na końcu i daje błąd, twierdząc, że nie można go znaleźć. Pierwsze 3 litery działają znacznie lepiej. (tzn. docker tag d583c3ac45fd myname/server:latestnie działa, podczas gdy docker tag d58 myname/server:latestdziała).
John Hamilton,
8

Ostatnio musiałem migrować niektóre obrazy z rejestru Docker (docker.mycompany.com) do 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
źródło
6
docker tag CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME
Huiguorou
źródło
2
Jasne, to zadziała, ale nie wyjaśniłeś tej osobie, dlaczego. Wydaje się, że są zdezorientowani tym, czym jest tag Docker ... Zakładając, że wiedzieli, jak używać docker -h
Adam Kaplan
1

Przyjęta odpowiedź jest świetna dla pojedynczych zmian nazw, ale tutaj jest sposób na zmianę nazw wielu obrazów, które mają to samo repozytorium jednocześnie (i usunięcie starych obrazów).

Jeśli masz stare obrazy formularza:

$ 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

I Ty chcesz:

new_name/image_name_1
new_name/image_name_2

Następnie można użyć tego (subbing w OLD_REPONAME, NEW_REPONAMEoraz TAGw stosownych przypadkach):

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

wstępni
źródło
-7

docker run -it --name NEW_NAME Istniejąca nazwa

Aby zmienić istniejącą nazwę obrazu.

Jay Patel
źródło
5
To tworzy kontener z nową nazwą. Nic się nie dzieje z nazwą obrazu .
jwodder