ฉันต้องการลบอิมเมจนักเทียบท่าทุกเวอร์ชันที่มีชื่อที่มีสตริงที่กำหนด ( imagename
)
ฉันได้ลองด้านล่างแล้ว แต่ดูเหมือนจะไม่ได้ผล:
docker images | grep 'imagename' | xargs -I {} docker rmi
ฉันต้องการลบอิมเมจนักเทียบท่าทุกเวอร์ชันที่มีชื่อที่มีสตริงที่กำหนด ( imagename
)
ฉันได้ลองด้านล่างแล้ว แต่ดูเหมือนจะไม่ได้ผล:
docker images | grep 'imagename' | xargs -I {} docker rmi
คำตอบ:
ลองทำดังต่อไปนี้:
docker rmi $(docker images |grep 'imagename')
Windows Powershell:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
docker images |grep 'imagename'
เวอร์ชันที่แน่นอนกว่าเล็กน้อย - grepping เฉพาะในชื่อที่เก็บ:
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker rmi $(docker images --format '{{.Repository}}:{{.Tag}}' | grep 'imagename')
docker images --format '{{.Repository}}:{{.Tag}}
กรองผลลัพธ์เพื่อให้แสดงเฉพาะ repo & tag เท่านั้น (เช่นfoo:latest
) กรองเส้นที่ให้กับภาพเหล่านั้นเท่านั้นที่มีgrep 'imagename
imagename
การใส่สิ่งนั้นในการ$()
ประเมินสิ่งนั้นและส่งผ่านไปยังด้านนอกdocker rmi
ซึ่งจะลบภาพเหล่านั้นที่ตรงกัน
docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker images
ใช้อาร์กิวเมนต์ตำแหน่งแรกเป็นชื่อรูปภาพเพื่อกรอง ไม่จำเป็นต้องใช้ grep และ awk ตัวเลือกที่จะกลับมาเพียงรหัสภาพจับคู่ซึ่งสามารถนำไปใช้เลี้ยง-q
docker rmi
docker rmi --force $(docker images -q 'imagename' | uniq)
uniq
จะต้องลบรายการที่ซ้ำในกรณีที่คุณมีภาพเดียวกันที่ติดแท็กที่แตกต่างกัน
เพียงแค่คุณเพิ่ม--force
ท้ายคำสั่งได้ ชอบ:
sudo docker rmi <docker_image_id> --force
เพื่อให้ชาญฉลาดยิ่งขึ้นคุณสามารถหยุดคอนเทนเนอร์ที่กำลังทำงานอยู่ก่อนที่จะลบภาพ:
sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')
sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')
sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}') --force
ในdocker ps
, $ 1เป็น 1 คอลัมน์เช่นนักเทียบท่าภาชนะ ID และ$ 3เป็น 3 คอลัมน์เช่นนักเทียบท่าภาพประจำตัวประชาชน
ฉันพบว่าคำตอบของฉันง่ายขึ้น
python_image
ตัวอย่างเช่นชื่อภาพของคุณคือ
จากนั้นรหัสของคุณควรเป็น :
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
ฉันหวังว่านี่จะช่วยได้.
ฉันยังได้คำตอบที่กระชับอีก การเปลี่ยนแปลงเพียงอย่างเดียวคือการลบ-I {}
แฟล็กที่ไม่จำเป็น
docker images | grep 'imagename' | xargs docker rmi
docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`
การดำเนินการนี้จะลบภาพทั้งหมดที่ใช้ชื่อ "imageName" ในบางกรณีสิ่งนี้อาจทำให้เกิดข้อผิดพลาดเช่น "รูปภาพถูกอ้างอิงในที่เก็บอย่างน้อยหนึ่งแห่ง" ในกรณีนั้นให้ใช้แรงลบ
docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`
อีกวิธีหนึ่งสามารถ:
docker images | awk '{ OFS = ":" }$1 ~ /imageName/ {print $1,$2}'
ด้วยเหตุผลบางประการฉันไม่สามารถใช้คำตอบที่ให้มาที่นี่ได้ นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน
docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi
awk '{print $3}'
เป็นส่วนสำคัญ มันแยก id จากคอลัมน์ที่ 3
สำหรับฉันใช้งานได้ ( Docker เวอร์ชัน 19.03.5 ):
docker rmi $(docker images 'imagename' -q)
คำสั่ง " docker images 'imagename' -q " จะแสดงรายการ id ภาพทั้งหมดของอาร์กิวเมนต์ที่อ้างถึงเดียวดังนั้นการเชื่อมต่อกับdocker rmi (หรือdocker rmi -fสำหรับการบังคับ) จะลบภาพทั้งหมดที่มีชื่อที่เลือก
docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )
ข้อสังเกตเล็กน้อย: จากสิ่งที่เราประสบดูเหมือนว่าคุณ - ตั้งแต่นักเทียบท่า 18.03 - ไม่สามารถลบภาพที่ไม่มีแท็กตามชื่อได้อีก คุณจำเป็นต้องใช้แท็กชื่อ + ตามที่ระบุไว้ข้างต้นหรือใช้ ID
docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'
docker rmi $(docker images --filter=reference="IMAGENAME:TAG")
ตัวอย่างเช่นหากฉันมีภาพต่อไปนี้
REPOSITORY TAG IMAGE ID CREATED SIZE
abcdefg/hij 7.0.0-beta-4.0 3128835950cd 7 days ago 51.4MB
abcdefg/hij-action 7.0.0-beta-4.0 42a7255beb74 7 days ago 97.4MB
abcdefg/hij-test 7.0.0-beta-4.0 17246aed35d0 7 days ago 97.4MB
abcdefg/hij-server 7.0.0-beta-4.0 42c45e561f2c 7 days ago 335MB
abcdefg/hij-init 7.0.0-beta-3.0 f648bb622933 7 days ago 55.2MB
abcdefg/hij-dir 7.0.0-beta-3.0 0db07d3aaccf 7 days ago 97.4MB
abcdefg/hij-mount 7.0.0-beta-3.0 18d1c0e1502c 4 weeks ago 33.7MB
จากนั้นdocker rmi $(docker images --filter=reference="abcd*:*4.0")
จะลบสี่ภาพแรก
ข้อมูลเพิ่มเติมโปรดดูhttps://docs.docker.com/engine/reference/commandline/images/
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
รวบรวมคำตอบสำหรับคำถามนี้เพื่อตอบสนองความต้องการของฉันซึ่งไม่ได้โพสต์ไว้ก่อนหน้านี้
ผมอยากให้ตรงกับภาพที่สร้างขึ้นในประเทศ: ที่ผมได้เปลี่ยนชื่อแท็กและผลักดันไปสู่การซื้อคืนภาคเอกชน:library/myapp
myrepo.org/library/myapp
เมื่อพวกเขาถูกผลักดันฉันต้องการล้างข้อมูลนักเทียบท่าในเครื่อง
และฉันไม่สนใจว่าจะไม่พบสิ่งใดหรือคำสั่งทำให้เกิดข้อผิดพลาด เพิ่มดังนั้น|| true
ในตอนท้ายเพื่อรวมไว้ในสคริปต์
docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true
จากคำตอบของ @ Aditya คุณยังสามารถสร้างฟังก์ชันทุบตีเพื่อลบภาพได้อย่างสบายใจ ใส่ฟังก์ชันนี้ลงใน~/.profile
ไฟล์. source ~/.profile
สร้างเซสชันเปลือกใหม่หรือแหล่งที่มาของมันด้วย
function drmi() {
docker images | grep $1 | xargs docker rmi
}
การใช้งาน:
drmi golang
ข้อมูล:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}" |grep imagename |grep none)
ให้ข้อผิดพลาดนี้:
การตอบสนองข้อผิดพลาดจาก daemon: รูปแบบการอ้างอิงไม่ถูกต้อง
อาจเป็นเพราะภาพของฉันมีลักษณะดังนี้:
hostname:5000/imagename:<none>
ฉันต้องใช้รหัสรูปภาพและทำตามคำสั่งนี้:
docker rmi `docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" |grep imagename |grep none |cut -d ' ' -f2`
ในการลบคอนเทนเนอร์ที่ออก:
docker container rm `docker container ls -a --format "{{.ID}} {{.Image}} {{.Status}}" |grep Exited |grep imagename|cut -d ' ' -f1`