นักเทียบท่าวิธีการเปลี่ยนชื่อที่เก็บหรือเปลี่ยนชื่อภาพ?


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 ต่างกันอย่างไร
Charlie Parker

@CharlieParker TAG โดยทั่วไปจะใช้สำหรับเวอร์ชันของพื้นที่เก็บข้อมูล - เช่นพื้นที่เก็บข้อมูล mariadb ที่มีแท็ก 10.1
Ian Hunter

ทำตามไวยากรณ์จากแท็กนักเทียบท่า - ช่วย cmd ด้านล่าง:docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
anandchaugule

ฉันต้องการเปลี่ยนชื่อพื้นที่เก็บข้อมูลทั้งหมดใน dockerhub .. เลวร้ายเกินไปที่เป็นไปไม่ได้ :(
danger89

คำตอบ:


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

หรือ

docker image tag d583c3ac45fd myname/server:latest

แท็กเป็นเพียงนามแฝงที่มนุษย์อ่านได้สำหรับชื่อภาพเต็ม ( d583c3ac45fd...)

ดังนั้นคุณสามารถมีหลายคนที่เกี่ยวข้องกับภาพเดียวกันตามที่คุณต้องการ หากคุณไม่ชอบชื่อเก่าคุณสามารถลบออกได้หลังจากที่คุณติดแท็กใหม่:

docker rmi server

alias/tagที่เพิ่งจะลบ เนื่องจากd583c3ac45fdมีชื่ออื่นภาพที่แท้จริงจะไม่ถูกลบ


มันไม่ได้ผลสำหรับฉัน เมื่อฉันเรียกใช้แท็กนักเทียบท่าชื่อ / เซิร์ฟเวอร์: นักเทียบท่าล่าสุดเห็นว่าเหมาะสมที่จะเสริม docker.io ดังนั้นแท็กรูปภาพจึงกลายเป็น docker.io/myname/server:latest
สกอตต์

โฮสต์ระบบปฏิบัติการและรุ่น Docker ของคุณคืออะไร ฉันสงสัยว่ามีบางอย่างเกี่ยวกับการติดตั้ง Docker ของคุณกำลังแก้ไขคำสั่งแท็ก
Andy

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
Traveler

20

เป็นการจดชวเลขคุณสามารถเรียกใช้:

docker tag d58 myname/server:latest

ไหนd58หมายถึง 3 ตัวอักษรแรกของรหัสภาพในกรณีนี้นั่นคือทั้งหมดที่คุณต้องการ

สุดท้ายคุณสามารถลบภาพเก่าดังต่อไปนี้:

docker rmi server

1
ในกรณีของฉันการใช้รหัสเต็มจะต่อท้าย: ล่าสุดจนถึงตอนท้ายและให้ข้อผิดพลาดโดยอ้างว่าหาไม่พบ ตัวอักษร 3 ตัวแรกทำงานได้ดีกว่ามาก (เช่นdocker tag d583c3ac45fd myname/server:latestไม่ทำงานในขณะที่ใช้docker tag d58 myname/server:latestงานได้)
John Hamilton

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
แน่นอนว่านี่จะใช้งานได้ แต่คุณไม่ได้อธิบายให้บุคคลนี้ทราบ ดูเหมือนว่าพวกเขาจะสับสนเกี่ยวกับสิ่งที่แท็กนักเทียบท่าคือ ... สมมติว่าพวกเขารู้วิธีใช้นักเทียบท่า -h
Adam Kaplan

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

จากนั้นคุณสามารถใช้นี้ (subbing ใน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

นักเทียบท่าวิ่ง -it --name NEW_NAME Existing_name

เพื่อเปลี่ยนชื่อภาพที่มีอยู่


5
ที่สร้างคอนเทนเนอร์ด้วยชื่อใหม่ ไม่มีอะไรเกิดขึ้นกับชื่อภาพ
jwodder
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.