Docker, как изменить имя репозитория или переименовать изображение?

569

Я пытаюсь изменить имя репозитория изображения:

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

Поэтому я хочу изменить имя serverна что-то вроде myname/server:

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

Как я могу это сделать?

Тимур Файзрахманов
источник
5
В чем разница между хранилищем и TAG?
Чарли Паркер
@CharlieParker TAG обычно используется для версии репозитория, например, mariadb для репозитория с тегом 10.1
Ian Hunter
Следуйте синтаксису из тега docker --help cmd ниже:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
anandchaugule
Я хотел бы изменить полное имя хранилища в Dockerhub .. Жаль, что это невозможно :(
danger89

Ответы:

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

или

docker image tag d583c3ac45fd myname/server:latest

Теги - это просто понятные псевдонимы для полного имени изображения ( d583c3ac45fd...).

Таким образом, вы можете иметь столько же, сколько вам нравится. Если вам не нравится старое имя, вы можете удалить его после того, как пометили его:

docker rmi server

Это просто удалит alias/tag. Так как d583c3ac45fdимеет другие имена, фактическое изображение не будет удалено.

Энди
источник
это не работает для меня. Когда я запускаю тег docker myname / server: последний docker считает целесообразным добавить в начало docker.io, поэтому тег image в итоге становится docker.io/myname/server:latest.
Скотт
Какая у вас ОС и версия Docker? Я подозреваю, что что-то в вашей установке Docker изменяет инструкцию тега.
Энди
25
Я также считаю, что опускание :latest- это хорошо, если на карту поставлен только один тег для имени изображения. Но весьма необычно то, что имя изображения называется REPOSITORY(а не изображение) в выходных данных, в docker imagesто время как его нужно переименовывать с помощью команды, вызываемой в tagто время TAGкак это отдельный столбец в этих выходных данных. Я надеюсь, что они убирают это и другие связанные вещи ...
matanster
Обратите внимание, что вы, вероятно, хотите, docker image tag from_server:version to_server:versionкак описано здесь: docs.docker.com/engine/reference/commandline/image_tag
Путешественник
20

В качестве сокращения вы можете запустить:

docker tag d58 myname/server:latest

Где d58представляет первые 3 символа ID ИЗОБРАЖЕНИЯ, в этом случае это все, что вам нужно.

Наконец, вы можете удалить старое изображение следующим образом:

docker rmi server
Mwiza
источник
1
В моем случае использование полного идентификатора как-то добавляет: последний в конце и выдает ошибку, утверждая, что не может его найти. Первые 3 буквы работают намного лучше. (т.е. docker tag d583c3ac45fd myname/server:latestне работает, тогда как docker tag d58 myname/server:latestработает.)
Джон Гамильтон
8

Недавно мне пришлось перенести некоторые изображения из реестра Docker (docker.mycompany.com) в 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
источник
6
docker tag CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME
Huiguorou
источник
2
Конечно, это сработает, но вы не объяснили этому человеку, почему. Кажется, они не понимают, что такое тег Docker ... Предполагая, что они действительно знают, как использовать docker -h
Адам Каплан
1

Принятый ответ отлично подходит для однократного переименования, но здесь есть способ переименовать несколько изображений, имеющих один и тот же репозиторий, одновременно (и удалить старые изображения).

Если у вас есть старые изображения формы:

$ 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

И вы хотите:

new_name/image_name_1
new_name/image_name_2

Затем вы можете использовать это (заменял в OLD_REPONAME, NEW_REPONAMEи TAGв зависимости от обстоятельств):

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

Предки
источник
0

Чтобы переименовать изображение, вы назначаете ему новый тег, а затем удаляете старый тег с помощью команды 'rmi':

$ docker tag $ docker rmi

Этот второй шаг страшен, так как «rmi» означает «удалить изображение». Однако docker на самом деле не удалит изображение, если у него есть другие теги. То есть, если вы сразу же выполните это с помощью: docker rmi, то это фактически удалит изображение (при условии, что другим изображениям не назначены теги).

Джасмит Сингх
источник
-7

docker run -it --name NEW_NAME Существующее_имя

Чтобы изменить имя существующего изображения.

Джей Патель
источник
6
Это создает контейнер с новым именем. С именем изображения ничего не происходит .
jwodder