Як змінити назву сховища чи перейменувати зображення докер?


568

Я намагаюся змінити назву сховища зображення:

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
яка різниця між REPOSITORY та TAG?
Чарлі Паркер

@CharlieParker TAG зазвичай використовується для версії сховища - наприклад, сховище mariadb з тегом 10.1
Ian Hunter

Дотримуйтесь синтаксису з тегу docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker

Я хотів би змінити всю назву сховища в dockerhub .. занадто погано, що неможливо :(
небезпека89

Відповіді:


1034
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.io, тому тег зображення в кінцевому підсумку стає docker.io/myname/server:latest.
Скотт

Яка ваша хост ОС та Докер версія? Я підозрюю, що щось про вашу установку Docker змінює інструкцію тегів.
Енді

25
Я також вважаю, що пропустити :latestдобре, якщо є лише один тег для назви зображення. Але дуже ідіосинкратично, що ім'я зображення називається REPOSITORY(а не зображенням) на виході, docker imagesтоді як його потрібно перейменовувати за допомогою команди, що називається, tagтоді TAGяк окремий стовпець у цьому висновку. Я сподіваюся, що вони
приберуть

Зауважте, що ви, мабуть, хочете, 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 символи ідентифікатора IMAGE, в цьому випадку це все, що вам потрібно.

Нарешті, ви можете видалити старе зображення таким чином:

docker rmi server

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

6
docker tag CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME

2
Звичайно, це спрацює, але ви не пояснили цій людині чому. Вони, мабуть, розгублені щодо того, що таке тег Докера ... Припускаючи, що вони знали, як використовувати 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


-7

docker run -it - ім'я NEW_NAME Існуюче_ім'я

Щоб змінити назву наявного зображення


5
Це створює контейнер з новою назвою. Нічого не відбувається з назвою зображення .
jwodder
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.