Docker làm thế nào để thay đổi tên kho lưu trữ hoặc đổi tên hình ảnh?


568

Tôi đang cố gắng thay đổi tên kho lưu trữ của hình ảnh:

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

Do đó tôi muốn đổi tên serverthành một cái gì đó như myname/server:

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

Tôi có thể làm cái này như thế nào?


5
sự khác biệt giữa REPOSITORY và TAG là gì?
Charlie Parker

@CharlieParker TAG thường được sử dụng cho phiên bản của kho lưu trữ, ví dụ: kho mariadb với thẻ 10.1
Ian Hunter

Thực hiện theo cú pháp từ thẻ docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
docker

Tôi muốn thay đổi toàn bộ tên kho lưu trữ trong dockerhub .. quá tệ là điều không thể :(
nguy hiểm89

Câu trả lời:


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

hoặc là

docker image tag d583c3ac45fd myname/server:latest

Các thẻ chỉ là bí danh có thể đọc được của con người cho tên hình ảnh đầy đủ ( d583c3ac45fd...).

Vì vậy, bạn có thể có bao nhiêu trong số chúng được liên kết với cùng một hình ảnh như bạn muốn. Nếu bạn không thích tên cũ, bạn có thể xóa tên đó sau khi bạn đặt lại tên:

docker rmi server

Điều đó sẽ chỉ loại bỏ alias/tag. Vì d583c3ac45fdcó tên khác, hình ảnh thực tế sẽ không bị xóa.


điều này không làm việc cho tôi. Khi tôi chạy thẻ docker myname / server: docker mới nhất thấy phù hợp để thêm vào docker.io, vì vậy thẻ hình ảnh kết thúc là docker.io/myname/server:latest.
Scott

Phiên bản hệ điều hành và Docker máy chủ của bạn là gì? Tôi nghi ngờ rằng một cái gì đó về cài đặt Docker của bạn đang sửa đổi hướng dẫn thẻ.
Andy

25
Tôi cũng thấy rằng bỏ qua :latestlà tốt nếu chỉ có một thẻ cho tên hình ảnh bị đe dọa. Nhưng điều khá đơn giản là tên hình ảnh được gọi là REPOSITORY(chứ không phải hình ảnh) trong đầu ra docker imagestrong khi nó cần được đổi tên bằng một lệnh được gọi tagtrong khi đó TAGlà một cột riêng biệt trong đầu ra đó. Tôi hy vọng họ dọn sạch thứ này và những thứ liên quan khác ...
matanster

Lưu ý rằng bạn có thể muốn docker image tag from_server:version to_server:versionnhư được mô tả ở đây: docs.docker.com/engine/reference/commandline/image_tag
Traveller

20

Là một tốc ký bạn có thể chạy:

docker tag d58 myname/server:latest

Trường hợp d58đại diện cho 3 ký tự đầu tiên của ID IMAGE, trong trường hợp này, đó là tất cả những gì bạn cần.

Cuối cùng, bạn có thể xóa hình ảnh cũ như sau:

docker rmi server

1
Trong trường hợp của tôi, bằng cách sử dụng ID đầy đủ bằng cách nào đó sẽ nối thêm: mới nhất đến cuối của nó và đưa ra một lỗi tuyên bố rằng nó không thể tìm thấy nó. 3 chữ cái đầu hoạt động tốt hơn nhiều. (tức là docker tag d583c3ac45fd myname/server:latestkhông hoạt động trong khi vẫn docker tag d58 myname/server:latesthoạt động.)
John Hamilton

8

Gần đây tôi đã phải di chuyển một số hình ảnh từ đăng ký Docker (docker.mycompany.com) sang 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
Chắc chắn, điều này sẽ làm việc, nhưng bạn đã không giải thích cho người này tại sao. Họ dường như bối rối về việc thẻ Docker là gì ... Giả sử họ đã biết cách sử dụng docker -h
Adam Kaplan

1

Câu trả lời được chấp nhận là tuyệt vời cho các lần đổi tên đơn lẻ, nhưng đây là một cách để đổi tên nhiều hình ảnh có cùng một kho lưu trữ cùng một lúc (và xóa các hình ảnh cũ).

Nếu bạn có hình ảnh cũ của mẫu:

$ 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

Và bạn muốn:

new_name/image_name_1
new_name/image_name_2

Sau đó, bạn có thể sử dụng này (thể thay thế trong OLD_REPONAME, NEW_REPONAMETAGnếu thích hợp):

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 --name NEW_NAME Ex hiện_name

Để thay đổi tên hình ảnh hiện có.


5
Điều đó tạo ra một container với tên mới. Không có gì xảy ra với tên hình ảnh .
jwodder
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.