Docker bagaimana cara mengubah nama repositori atau mengganti nama gambar?

569

Saya mencoba mengubah nama repositori dari gambar:

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

Karenanya saya ingin mengubah nama servermenjadi sesuatu seperti myname/server:

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

Bagaimana saya bisa melakukan ini?

Timur Fayzrakhmanov
sumber
5
apa perbedaan antara REPOSITORY dan TAG?
Charlie Parker
@CharlieParker TAG biasanya digunakan untuk versi repositori — mis., Mariadb repositori dengan tag 10.1
Ian Hunter
Ikuti sintaksis dari tag buruh pelabuhan --membantu cmd di bawah ini:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
anandchaugule
Saya ingin mengubah seluruh nama repositori di dockerhub .. terlalu buruk itu tidak mungkin :(
hazard89

Jawaban:

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

atau

docker image tag d583c3ac45fd myname/server:latest

Tag hanya alias yang dapat dibaca manusia untuk nama gambar lengkap ( d583c3ac45fd...).

Jadi Anda dapat memiliki banyak dari mereka yang terkait dengan gambar yang sama seperti yang Anda suka. Jika Anda tidak menyukai nama lama, Anda dapat menghapusnya setelah Anda mem-retagnya:

docker rmi server

Itu hanya akan menghapus alias/tag. Karena d583c3ac45fdmemiliki nama lain, gambar yang sebenarnya tidak akan dihapus.

Andy
sumber
ini tidak bekerja untuk saya. Ketika saya menjalankan tag docker myname / server: buruh pelabuhan terbaru melihat cocok untuk prepend docker.io, sehingga tag gambar akhirnya menjadi docker.io/myname/server:latest.
Scott
Apa versi OS dan Docker host Anda? Saya menduga bahwa sesuatu tentang instalasi Docker Anda sedang memodifikasi instruksi tag.
Andy
25
Saya juga menemukan bahwa menghilangkan :latesttidak masalah jika hanya ada satu tag untuk nama gambar yang dipertaruhkan. Tapi itu sangat istimewa bahwa nama gambar disebut REPOSITORY(dan bukan gambar) dalam output docker imagessementara itu perlu diganti dengan perintah yang disebut tagsedangkan TAGkolom terpisah dalam output itu. Saya harap mereka membersihkan ini dan hal-hal terkait lainnya ...
matanster
Perhatikan bahwa Anda mungkin ingin docker image tag from_server:version to_server:versionseperti yang dijelaskan di sini: docs.docker.com/engine/reference/commandline/image_tag
Traveler
20

Sebagai steno, Anda dapat menjalankan:

docker tag d58 myname/server:latest

Di mana d58mewakili 3 karakter pertama dari ID IMAGE, dalam hal ini, itu saja yang Anda butuhkan.

Terakhir, Anda dapat menghapus gambar lama sebagai berikut:

docker rmi server
Mwiza
sumber
1
Dalam kasus saya, menggunakan ID lengkap entah bagaimana menambahkan: terbaru hingga akhir dan memberikan kesalahan mengklaim tidak dapat menemukannya. 3 huruf pertama bekerja lebih baik. (Yaitu docker tag d583c3ac45fd myname/server:latesttidak bekerja sementara docker tag d58 myname/server:latestbekerja.)
John Hamilton
8

Baru-baru ini saya harus melakukan migrasi beberapa gambar dari registry Docker (docker.mycompany.com) ke 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
sumber
6
docker tag CURRENT_IMAGE_NAME DESIRED_IMAGE_NAME
Huiguorou
sumber
2
Tentu, ini akan berhasil, tetapi Anda belum menjelaskan alasannya kepada orang ini. Mereka tampaknya bingung tentang apa itu tag Docker ... Dengan anggapan mereka tahu bagaimana menggunakan docker -h
Adam Kaplan
1

Jawaban yang diterima bagus untuk penggantian nama tunggal, tetapi berikut ini adalah cara untuk mengganti nama banyak gambar yang memiliki repositori yang sama sekaligus (dan menghapus gambar yang lama).

Jika Anda memiliki gambar lama dari formulir:

$ 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

Dan Anda ingin:

new_name/image_name_1
new_name/image_name_2

Kemudian Anda dapat menggunakan ini (subbing di OLD_REPONAME, NEW_REPONAME, dan TAGsesuai):

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

ascendant
sumber
0

Untuk mengganti nama gambar, Anda memberinya tag baru, dan kemudian menghapus tag lama menggunakan perintah 'rmi':

tag $ docker $ docker rmi

Langkah kedua ini menakutkan, karena 'rmi' berarti "hapus gambar". Namun, buruh pelabuhan tidak akan benar-benar menghapus gambar jika memiliki tag lain. Artinya, jika Anda harus segera mengikuti ini dengan: docker rmi, maka itu benar-benar akan menghapus gambar (dengan asumsi tidak ada tag lain yang ditetapkan untuk gambar)

Jasmeet Singh
sumber
-7

docker run -it --name NEW_NAME Existing_name

Untuk mengubah nama gambar yang ada.

Jay Patel
sumber
6
Itu menciptakan wadah dengan nama baru. Tidak ada yang terjadi dengan nama gambar .
jwodder