Làm thế nào để loại bỏ một hình ảnh trong Docker?


840

Tôi đang chạy Docker trong Vagrant trong OS X 10.8.4 (Mountain Lion) và bất cứ khi nào tôi cố gắng xóa một hình ảnh đã lưu, tôi gặp lỗi:

$ docker rmi some-image-id
2013/07/15 hh:mm:ss unexpected JSON input

Theo sự rmigiúp đỡ, cú pháp thích hợp là docker rmi IMAGE [IMAGE...]và tôi không biết phải làm gì với điều đó.

Làm thế nào tôi có thể xóa một hình ảnh?

$ docker version
Client version: 0.4.8
Server version: 0.4.8
Go version: go1.1

 

$docker info
Containers: 1
Images: 3

Thật thú vị, khi tôi chạy docker ps, không có container nào xuất hiện cả. Chạy docker imagescho thấy bốn (4) basehình ảnh và một (1) nodehình ảnh.


1
Phiên bản nào của docker bạn đang sử dụng? Bạn có thể dán đầu ra của 'phiên bản docker' và 'thông tin docker' không? Tôi chỉ cố gắng với chủ và nó hoạt động tốt.
creack

Tôi đã cập nhật câu hỏi với thông tin đó.
Jules

1
docker infohiển thị số lượng hình ảnh thực tế, bạn có thể thử ./docker images -a -q | sort | uniq | wc -lnó phải là cùng một kết quả (-a cho tất cả các hình ảnh, -q chỉ cho id). docker pschỉ hiển thị các container đang hoạt động, bạn có thể làm docker ps -ađể liệt kê tất cả các container
creack

Bạn có thể thử khởi động docker daemon với -Dtùy chọn và ứng dụng khách không? docker -d -D& ; docker -D rmi <id>. Bạn cũng có thể thử CID=$(docker run -d ubuntu bash); ID=$(docker commit $CID); docker rmi $IDchứ?
creack

4
Hãy xem yêu cầu kéo này: github.com/dotcloud/docker/pull/1225
creack

Câu trả lời:


1013

Thử docker rmi node . Cần làm việc.

Xem tất cả các container được tạo đơn giản như docker ps -a .

Để xóa tất cả các container hiện có (không phải hình ảnh!) Chạy docker rm $(docker ps -aq)


13
Nếu một số container của bạn vẫn đang chạy, bạn có thể chạy: docker stop $ (docker ps -qa) để dừng tất cả các container. Tôi nghĩ rằng việc loại bỏ một container đang chạy có thể không hoạt động, ít nhất tôi nhớ rằng tôi có vấn đề với điều này. Tôi có thể sai cô ấy ... Tôi đã kiểm tra trang người đàn ông và nó ủng hộ giả thuyết của tôi: "-f, --force = true | false Buộc loại bỏ container đang chạy. Mặc định là sai."
Konrad Kleine

1
À, tôi không biết về lệnh "xóa tất cả container hiện có". Đã viết riêng: docker ps -a | sed -r 's / ^ (\ w +). * / \ 1 / g' | sed -r 's / ^ CONTAINER //' | sed -r 's / ^ (\ w +) / docker rm \ 1 / g' | awk 'hệ thống ($ 0)' Cảm ơn!
Anurag

4
Bạn biết các tùy chọn dòng lệnh được thiết kế tồi khi bạn cần sử dụng các tính năng dành riêng cho shell để đạt được chức năng cơ bản.
dùng3467349

Để xóa tất cả các hình ảnh hiện tại, bạn có thể sử dụng - "docker rmi $ (hình ảnh docker -q)"
con người

Để xóa tất cả các container hiện có bằng windows powershell: docker ps -aq | Foreach-Object { docker stop $_; docker rm $_; }
fartwhif 16/12/18

565

Sau đây là một số cách để loại bỏ hình ảnh / thùng chứa docker:

Xóa ảnh đơn

docker rmi image_name:version/image-id

Xóa tất cả hình ảnh

docker rmi $(docker images -qf "dangling=true")

Giết các container và loại bỏ chúng:

docker rm $(docker kill $(docker ps -aq))

Lưu ý: Thay thế killbằng stopđể tắt máy duyên dáng

Xóa tất cả hình ảnh ngoại trừ "hình ảnh của tôi"

Sử dụng grep để loại bỏ tất cả ngoại trừ my-imageubuntu

docker rmi $(docker images | grep -v 'ubuntu\|my-image' | awk {'print $3'})

Hoặc (không có awk)

docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))


25
Ngoài ra: xóa hình ảnh "lơ lửng" (hình ảnh không có thẻ):docker rmi $(docker images -qf "dangling=true")
kolypto

5
shoudl bedocker rm $(docker kill $(docker ps -a -q))
BMW

1
"Xóa tất cả ngoại trừ" mà không có awk:docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
phobie

1
@kolypto Mặc dù "dangling = true" dường như cuối cùng không xóa các container không nguy hiểm. Chạy lại, trừ cờ -f và treo lủng lẳng để loại bỏ phần còn lại.
DougW

1
Có phải chỉ có tôi, hoặc đó là đề nghị cuối cùng (Hoặc (không có awk)) không thực sự hoạt động?
Mike Wise

196

Xóa tất cả các container docker

docker rm $(docker ps -a -q)

Xóa tất cả hình ảnh docker

docker rmi $(docker images -q)

7
Xóa các hình ảnh chưa được đánh dấu:docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
Barrett Clark

1
eq8.eu/bloss/23-spring-cleaning-for-webdevelopers sudo docker rmi -f $(sudo docker images | grep "<none>" | awk "{print \$3}") và sau đó xóa thẻ phát hành trực tiếp của năm 2015 (ví dụ live-20150121223) chúng ta có thể làm sudo docker rmi -f $(sudo docker images | grep live-2015 | awk "{print \$3}")
tương

Để buộc nó, bạn phải viết: docker -f rm $ (docker ps -a -q)
Adrian Lopez

71

Để xóa hình ảnh khỏi Docker bằng ID hình ảnh:

  1. Lấy danh sách tất cả các hình ảnh

    docker images
    
  2. Xác định ID hình ảnh của hình ảnh bạn muốn xóa, ví dụ:

    REPOSITORY     TAG     IMAGE ID        CREATED        VIRTUAL SIZE
    kweku360/java  latest  08d3a9b8e166    2 weeks ago         5.733 GB`
    
  3. Cuối cùng xóa hình ảnh bằng ID hình ảnh (chỉ yêu cầu ba chữ số đầu tiên)

    docker rmi 08d
    

1
Trước tiên, bạn cần dừng container và xóa nó, tham khảo stackoverflow.com/questions/21398087/iêu
vikramvi

37

Hình:

  1. Liệt kê hình ảnh

    hình ảnh bến tàu

  2. Xóa một hình ảnh

    docker rmi image_name

  3. Buộc xóa một hình ảnh

    docker rmi -f image_name

Thùng đựng hàng:

  1. Liệt kê tất cả các container

    bến tàu ps -a

  2. Hủy bỏ một container

    docker rm container_id

  3. Buộc loại bỏ một container

    docker rm -f container_id


29

Cập nhật, như nhận xét của VonC trong Cách loại bỏ các container Docker cũ .

Với Docker 1.13 (Q4 2016), giờ đây bạn có:

docker system prune sẽ xóa TẤT CẢ dữ liệu không sử dụng (nghĩa là theo thứ tự: container bị dừng, khối lượng không có container và hình ảnh không có container).

Xem PR 26108cam kết 86de7c0 , đang giới thiệu một vài lệnh mới để giúp tạo thuận lợi cho việc hiển thị bao nhiêu không gian dữ liệu daemon Docker đang chiếm trên đĩa và cho phép dễ dàng dọn sạch phần thừa "không cần thiết".

docker system prune

WARNING! This will remove:
    - all stopped containers
    - all volumes not used by at least one container
    - all images without at least one container associated to them
Are you sure you want to continue? [y/N] y

Cảm ơn câu trả lời thấu đáo, nhưng điều này không trả lời trực tiếp câu hỏi ban đầu (câu trả lời đã được trả lời và câu trả lời hàng đầu vẫn có liên quan).
Jules

2
Tôi đồng ý. Tuy nhiên, vì tiêu đề của câu hỏi này rất chung chung nên điều này đã trở thành một câu hỏi tham khảo, vì vậy tôi nghĩ rằng việc đưa ra một bản cập nhật về cơ chế đã được đưa ra.
qkrijger

24

Loại bỏ container

  1. Để loại bỏ một container cụ thể

    docker rm CONTAINER_ID CONTAINER_ID
    
    • Đối với hình ảnh duy nhất

      docker rm  70c0e19168cf
      
    • Đối với nhiều hình ảnh

      docker rm  70c0e19168cf c2ce80b62174
      
  2. Loại bỏ các container đã thoát

    docker ps -a -f status=exited
    
  3. Hủy bỏ tất cả các container

    docker ps -q -a | xargs docker rm
    


Xóa hình ảnh

docker rmi IMAGE_ID
  1. Xóa hình ảnh cụ thể

    • cho hình ảnh duy nhất

      docker rmi ubuntu
      
    • cho nhiều hình ảnh

      docker rmi ubuntu alpine
      
  2. Xóa hình ảnh lơ lửng Hình ảnh lơ lửng
    là các lớp không có mối quan hệ với bất kỳ hình ảnh được gắn thẻ nào vì hình ảnh Docker được cấu thành từ nhiều hình ảnh.

    docker rmi -f $(docker images -f dangling=true -q)
    
  3. Xóa tất cả hình ảnh Docker

    docker rmi -f $(docker images -a -q)
    

Xóa tập

Để liệt kê khối lượng, chạy docker volume ls

  1. Xóa một khối lượng cụ thể

    docker volume rm VOLUME_NAME
    
  2. Loại bỏ khối lượng lơ lửng

    docker volume rm $(docker volume ls -f dangling=true -q)
    
  3. Hủy bỏ một container và khối lượng của nó

    docker rm -v CONTAINER_NAME
    

Tại sao lại nhân đôi CONTAINER_ID?
Peter Mortensen

19

docker rm container_name

docker rmi image_name

docker help

rm Hủy bỏ một hoặc nhiều container

rmi Xóa một hoặc nhiều hình ảnh


Cảm ơn, nhưng câu hỏi này đã có một số câu trả lời và một câu trả lời được chọn, đã giải quyết vấn đề này gần 3 năm trước.
Jules

13
docker rmi  91c95931e552

Lỗi phản hồi từ daemon: Xung đột, không thể xóa 91c95931e552 vì bộ chứa 76068d66b290 đang sử dụng nó, sử dụng -f để buộc FATA [0000] Lỗi: không thể xóa một hoặc nhiều hình ảnh

Tìm ID container,

# docker ps -a

# docker rm  daf644660736 

Đó có phải là một câu trả lời cho câu hỏi?
Peter Mortensen

Tại sao daf644660736? Làm thế nào là liên quan đến bất kỳ trước đây?
Peter Mortensen

5

Trước hết, chúng ta phải dừng và loại bỏ các container Docker được đính kèm với hình ảnh Docker mà chúng ta sẽ loại bỏ.

Vì vậy, đầu tiên

  • docker stop container-id - Để dừng container đang chạy
  • docker rm container-id - Để xóa / xóa container

sau đó,

  • docker rmi image-id - Để xóa / xóa hình ảnh

3

Đối với phiên bản 1.13 trở lên:

docker image rm [OPTIONS] IMAGE [IMAGE...]

So sánh:

các [OPTIONS]dường như không có sự khác biệt.

--force , -f        Force removal of the image
--no-prune          Do not delete untagged parents

Từ: Giới thiệu Docker 1.13

CLI tái cấu trúc

Trong Docker 1.13, chúng tôi tập hợp lại mọi lệnh để ngồi dưới đối tượng logic mà nó tương tác. Ví dụ liststartcác container hiện là các tiểu ban của docker containerhistorylà một tiểu ban của docker image.

Những thay đổi này cho phép chúng tôi dọn sạch cú pháp Docker CLI, cải thiện văn bản trợ giúp và làm cho Docker đơn giản hơn để sử dụng. Cú pháp lệnh cũ vẫn được hỗ trợ, nhưng chúng tôi khuyến khích mọi người chấp nhận cú pháp mới .


3

Docker cung cấp một số lệnh để loại bỏ images.

Hiển thị / Xóa Images:

docker images
docker images -a # All images
docker images --no-trunc # List the full length image IDs

docker images --filter "dangling=true" // Show unstage images
docker rmi $(docker images -f "dangling=true" -q) # Remove on unstages images

docker rmi <REPOSITORY> or <Image ID> # Remove a single image

docker image prune # Interactively remove dangling images
docker image prune -a # Remove all images

or 

docker rmi -f $(sudo docker images -a -q)

Ngoài ra, bạn cũng có thể sử dụng filtercác tham số để xóa bộ ảnh cùng một lúc:

Thí dụ:

$docker images --filter "before=<hello-world>" // It will all images before hello-world

$docker images --filter "since=<hello-world>" // It will all images since hello-world

Vì vậy, bạn có thể xóa hình ảnh bộ lọc như thế này:

docker rmi $(docker images --filter "since=<hello-world>")
docker rmi $(docker images --filter "before=<hello-world>")

1

Xóa tất cả chúng bằng cách sử dụng

Bước 1: Giết tất cả các container

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker kill $i ; done

Bước 2: RM họ đầu tiên

for i in `sudo docker ps -a | awk '{ print $1 }'`; do sudo docker rm $i ; done

Bước 3: Xóa hình ảnh bằng vũ lực

for i in `sudo docker images | awk '{ print $3}'`; do  sudo docker rmi --force $i ; done

Sử dụng bước 1 trong trường hợp bạn gặp lỗi khi nói rằng nó không thể bị xóa do phụ thuộc vào con


1

Nếu bạn muốn tự động / định kỳ dọn sạch các container đã thoát và xóa các hình ảnh và khối lượng không được sử dụng bởi một container đang chạy, bạn có thể tải xuống hình ảnh meltwater/docker-cleanup.

Tôi sử dụng điều này trong sản xuất vì chúng tôi triển khai nhiều lần trong ngày trên nhiều máy chủ và tôi không muốn đến mọi máy chủ để dọn dẹp (điều đó sẽ gây khó khăn).

Chỉ cần chạy:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

Nó sẽ chạy cứ sau 30 phút (hoặc tuy nhiên bạn đặt nó lâu bằng tùy chọn DELAY_TIME = 1800) và dọn sạch các thùng chứa và hình ảnh đã thoát.

Thêm chi tiết: https://github.com/meltwater/docker-cleanup/blob/master/README.md


1

Đây là tập lệnh shell để xóa hình ảnh được gắn thẻ (có tên) và nó chứa. Lưu dưới dạng docker-rmi và chạy bằng 'docker-rmi my-image-name'

#!/bin/bash

IMAGE=$1

if [ "$IMAGE" == "" ] ; then
  echo "Missing image argument"
  exit 2
fi

docker ps -qa -f "ancestor=$IMAGE" | xargs docker rm
docker rmi $IMAGE

bạn cần xargs -rlàm cho nó hoạt động trong trường hợp không có thùng chứa phù hợp.
như.

0

Tại sao không ai nhắc đến docker-compose! Tôi mới sử dụng được một tuần và tôi không thể tồn tại nếu không có nó. Tất cả những gì bạn cần là viết một yml chỉ mất vài phút học, và sau đó bạn đã sẵn sàng để đi. Nó có thể khởi động hình ảnh, thùng chứa (cần thiết trong các dịch vụ được gọi là) và cho phép bạn xem lại nhật ký giống như bạn sử dụng với các lệnh gốc của docker. Hãy thử nó:

docker-compose up -d
docker-compose down --rmi 'local'

Trước khi tôi sử dụng docker-compose, tôi đã viết kịch bản shell của riêng mình, sau đó tôi phải tùy chỉnh tập lệnh bất cứ khi nào cần thiết, đặc biệt là khi kiến ​​trúc ứng dụng thay đổi. Bây giờ tôi không phải làm điều này nữa, nhờ vào docker-compose.


docker-composelà một công cụ phối hợp và thường không thực tế để sử dụng trong các dự án đơn giản. Một dockergiải pháp độc lập (không yêu cầu sử dụng các cấu hình thường rất khó docker-compose.yml) là thích hợp hơn trong bối cảnh của câu hỏi này. Ngoài ra, có rất nhiều, rất nhiều câu trả lời hay ở đây.
Jules

@Jules không ai đề cập đến docker-compose không có nghĩa là chúng là những câu trả lời tồi và cũng không có nghĩa đây là một câu trả lời bất lực. Các lệnh gốc của Docker không tệ, nhưng tẻ nhạt và nó đòi hỏi phải gõ khá nhiều lần. "Một là tốt, và hai là quá nhiều".
Tiina

-1

Đối với tôi sau đây làm việc tốt:

> docker images
REPOSITORY   TAG           IMAGE ID          CREATED             SIZE
debian       jessie        86baf4e8cde9      3 weeks ago         123MB
ubuntu       yakkety       7d3f705d307c      3 weeks ago         107MB
alpine       3.5           074d602a59d7      7 weeks ago         3.99MB

Sau đó hãy tiếp tục và xóa một hình ảnh bằng cách chạy một số như thế này:

> docker rmi debian:jessie
> docker rmi ubuntu:yakkety
> docker rmi alipine:3.5

-1

Liệt kê hình ảnh:

ahanjura@ubuntu:~$ sudo docker images

TÌM HIỂU THÊM TÌM HIỂU ID TÌM KIẾM TÌM KIẾM 88282f8eda00 19 giây trước 308.5 MB 13e5d3d682f4 19 giờ trước 663 MB busybox2 mới nhất, cách đây 20 giờ, cách đây 14 giờ 1 phút, cách xa nhất, cách xa nhất thời gian. busybox mới nhất 6ad733544a63 6 tuần trước 1.129 MB ubfox 16.10 7d3f705d307c 5 tháng trước 106,7 MB

Xóa hình ảnh:

ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00

Deleted: sha256: 88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194 Deleted: sha256: 4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9 Deleted: sha256: 8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8 Deleted: sha256: b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43

ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4

Lỗi phản hồi từ daemon: mâu thuẫn: không thể xóa 13e5d3d682f4 (phải bắt buộc) - hình ảnh đang được sử dụng bởi container bị dừng 5593e25eb638

Xóa bằng vũ lực:

ahanjura@ubuntu:~$ sudo docker rmi -f 13e5d3d682f4

Deleted: sha256: 13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e Deleted: sha256: 3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378 Deleted: sha256: 5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af Deleted: sha256: 18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf


-1

Trong trường hợp của tôi, vấn đề là tôi có hình ảnh kéo theo cùng tên, giải pháp là thêm thẻ sau tên hoặc id

sudo docker rmi <NAME>:<TAG>

Ví dụ:

sudo docker rmi php:7.0.4-fpm
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.