Tôi muốn xóa tất cả các phiên bản của hình ảnh docker có tên chứa một chuỗi ( imagename
) nhất định.
Tôi đã thử những cách dưới đây, nhưng có vẻ như nó không hoạt động:
docker images | grep 'imagename' | xargs -I {} docker rmi
Tôi muốn xóa tất cả các phiên bản của hình ảnh docker có tên chứa một chuỗi ( imagename
) nhất định.
Tôi đã thử những cách dưới đây, nhưng có vẻ như nó không hoạt động:
docker images | grep 'imagename' | xargs -I {} docker rmi
Câu trả lời:
Hãy thử những cách sau:
docker rmi $(docker images |grep 'imagename')
Windows Powershell:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "imagename")
docker images |grep 'imagename'
Phiên bản chính xác hơn một chút - chỉ ghi tên kho lưu trữ:
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}}
lọc đầu ra để chỉ repo & thẻ được hiển thị (tức là foo:latest
). grep 'imagename
lọc những dòng đó để chỉ những hình ảnh có chứa imagename
. Đưa cái đó vào sẽ $()
đánh giá cái đó & chuyển ra bên ngoài docker rmi
để loại bỏ những hình ảnh đã khớp.
docker rmi -f $(docker images --format '{{.Repository}}:{{.Tag}}' --filter=reference='imagename:*')'
docker rmi $( docker images --format '{{.Repository}}:{{.Tag}}' | Select-String -Pattern 'imagename')
docker images
thực sự sử dụng đối số vị trí đầu tiên làm tên hình ảnh để lọc. Không cần grep's và awk's. Các-q
tùy chọn sẽ trở lại chỉ ID hình ảnh phù hợp mà có thể được làm thức ăn cho docker rmi
.
docker rmi --force $(docker images -q 'imagename' | uniq)
Bắt uniq
buộc phải xóa các bản sao, trong trường hợp bạn có cùng một hình ảnh được gắn thẻ khác nhau.
Đơn giản bạn có thể thêm --force
vào cuối lệnh. Giống:
sudo docker rmi <docker_image_id> --force
Để làm cho nó thông minh hơn, bạn có thể dừng bất kỳ vùng chứa nào đang chạy trước khi xóa hình ảnh:
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
Trong đó docker ps
, $ 1 là cột đầu tiên tức là id vùng chứa docker và $ 3 là cột thứ 3 tức là id hình ảnh docker
Tôi thấy câu trả lời của tôi đơn giản hơn.
Ví dụ, tên hình ảnh của bạn là python_image
.
Sau đó, mã của bạn phải là :
docker rmi $(docker images --filter=reference='python_image' --format "{{.ID}}")
Tôi hi vọng cái này giúp được.
Tôi cũng có một câu trả lời ngắn gọn khác. Thay đổi duy nhất là loại bỏ -I {}
cờ không cần thiết .
docker images | grep 'imagename' | xargs docker rmi
docker rmi `docker images | awk '$1 ~ /imageName/ {print $3}'`
Thao tác này sẽ xóa tất cả các hình ảnh có tên "imageName". Trong một số trường hợp, điều này có thể gây ra lỗi như "hình ảnh được tham chiếu trong một hoặc nhiều kho". Trong trường hợp đó sử dụng lực xóa.
docker rmi -f `docker images | awk '$1 ~ /imageName/ {print $3}'`
Một cách khác có thể là:
docker images | awk '{ OFS = ":" }$1 ~ /imageName/ {print $1,$2}'
Vì một số lý do, tôi không thể sử dụng bất kỳ câu trả lời nào trong số các câu trả lời đã cho ở đây. Đây là những gì đã làm việc cho tôi.
docker images | grep \"gcr.io/kubernetes-learn-197422/last-week-weather-service\" | awk '{print $3}' | xargs docker rmi
awk '{print $3}'
là một phần quan trọng. Nó trích xuất id từ cột thứ 3.
Đối với tôi đã làm việc ( Docker phiên bản 19.03.5 ):
docker rmi $(docker images 'imagename' -q)
Lệnh " docker images 'imagename' -q " sẽ liệt kê tất cả id hình ảnh của đối số được trích dẫn đơn lẻ để nối nó với docker rmi (hoặc docker rmi -f để buộc) nó sẽ xóa tất cả hình ảnh có tên đã chọn
docker rmi $(docker image ls repo/image_name* | awk {'print $1":"$2'} )
Nhận xét nhỏ: Từ những gì chúng tôi đang gặp phải, có vẻ như bạn - kể từ docker 18.03 - không còn có thể xóa các hình ảnh không được gắn thẻ chỉ dựa trên tên. Bạn cần sử dụng tên + thẻ như đã nêu ở trên hoặc sử dụng ID.
docker images --format={{.ID}} | xargs -I % sh -c 'docker rmi --force % 2>&1'
docker rmi $(docker images --filter=reference="IMAGENAME:TAG")
ví dụ nếu tôi có những hình ảnh sau
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
Sau đó, docker rmi $(docker images --filter=reference="abcd*:*4.0")
sẽ loại bỏ bốn hình ảnh đầu tiên.
Thông tin thêm vui lòng xem https://docs.docker.com/engine/reference/commandline/images/
docker rmi $(docker images -q --filter=reference="IMAGENAME:TAG")
Cùng nhau đưa ra một giải pháp cho câu hỏi này để đáp ứng nhu cầu của tôi, câu hỏi chưa được đăng trước đây.
Tôi muốn để phù hợp với hình ảnh được xây dựng tại địa phương: library/myapp
mà tôi đã đổi tên, gắn thẻ và đẩy lên một repo tin: myrepo.org/library/myapp
. Sau khi chúng được đẩy, tôi muốn xóa reg của docker cục bộ.
Và tôi không quan tâm nếu không tìm thấy gì hoặc lệnh báo lỗi. Do đó được thêm || true
vào cuối để đưa vào các tập lệnh.
docker rmi $(docker image ls */library/myApp --format '{{.Repository}}:{{.Tag}}') || true
Dựa trên câu trả lời của @ Aditya, bạn cũng có thể tạo hàm bash để xóa hình ảnh một cách dễ dàng. Đặt chức năng này cho của bạn ~/.profile
. Tạo một phiên trình bao mới hoặc tạo nguồn bằng source ~/.profile
.
function drmi() {
docker images | grep $1 | xargs docker rmi
}
Sử dụng:
drmi golang
Thông tin:
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}" |grep imagename |grep none)
Đưa ra lỗi này:
Phản hồi lỗi từ daemon: định dạng tham chiếu không hợp lệ
Có lẽ vì hình ảnh của tôi trông như thế này:
hostname:5000/imagename:<none>
Tôi đã phải sử dụng id hình ảnh và thực hiện lệnh này:
docker rmi `docker images --format "{{.Repository}}:{{.Tag}} {{.ID}}" |grep imagename |grep none |cut -d ' ' -f2`
Để xóa các vùng chứa đã thoát:
docker container rm `docker container ls -a --format "{{.ID}} {{.Image}} {{.Status}}" |grep Exited |grep imagename|cut -d ' ' -f1`