Docker'daki bir görüntü nasıl kaldırılır?


840

Docker'ı Vagrant altında OS X 10.8.4 (Mountain Lion) altında çalıştırıyorum ve kaydedilen bir görüntüyü silmeye çalıştığımda bir hata alıyorum:

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

rmiYardıma göre , doğru sözdizimi docker rmi IMAGE [IMAGE...]ve bunun ne yapacağından emin değilim.

Bir görüntüyü nasıl silebilirim?

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

 

$docker info
Containers: 1
Images: 3

İlginç bir şekilde, koştuğumda docker pshiçbir kap ortaya çıkmıyor. Koşu docker imagesdört (4) basegörüntü ve bir (1) nodegörüntü gösterir.


1
Hangi docker sürümünü kullanıyorsunuz? 'Docker sürümü' ve 'docker bilgisi' çıktılarını yapıştırabilir misiniz? Sadece usta ile denedim ve iyi çalıştı.
13'te

Soruyu bu bilgilerle güncelledim.
Jules

1
docker infogörüntülerin gerçek miktarını gösterir, ./docker images -a -q | sort | uniq | wc -laynı sonuç olmasını deneyebilirsiniz (tüm görüntüler için -a, yalnızca kimlikler için -q). docker psyalnızca aktif konteynerleri gösterir, docker ps -atüm konteynerleri listelemek için yapabilirsiniz
creack

Docker daemon'unu -Dseçenek ve istemci ile başlatmayı deneyebilir misiniz ? docker -d -D& ; docker -D rmi <id>. Ayrıca deneyebilir CID=$(docker run -d ubuntu bash); ID=$(docker commit $CID); docker rmi $IDmisiniz?
13'te

4
Bu çekme isteğine bir göz atın: github.com/dotcloud/docker/pull/1225
creack

Yanıtlar:


1013

Deneyin docker rmi node. Bu işe yaramalı.

Oluşturulan tüm kapları görmek kadar basittir docker ps -a.

Mevcut tüm kapsayıcıları kaldırmak için (resimleri değil!) Çalıştırın docker rm $(docker ps -aq)


13
Bazı kaplarınız hala çalışıyorsa şunu çalıştırabilirsiniz: docker stop $ (docker ps -qa) tüm kapsayıcıları durdurur. Çalışan bir kapsayıcıyı kaldırmanın işe yaramayabileceğini düşünüyorum, en azından bununla ilgili sorunlarım olduğunu hatırlıyorum. Ona yanılıyor olabilirim ... Man sayfasını kontrol ettim ve hipotezimi destekliyor: "-f, --force = true | false Çalışan kapsayıcıyı kaldırmaya zorla. Varsayılan yanlıştır."
Konrad Kleine

1
"Varolan tüm kapsayıcıları kaldır" komutunu bilmiyordum. Kendi yazmıştı: docker ps -a | sed -r 's / ^ (\ w +). * / \ 1 / g' | sed -r 's / ^ KONTEYNER //' | sed -r 's / ^ (\ w +) / liman işçisi rm \ 1 / g' | awk 'system (0 $)' Teşekkürler!
Anurag

4
Temel işlevsellik elde etmek için kabuğa özgü özellikleri kullanmanız gerektiğinde komut satırı seçeneklerinin kötü tasarlandığını biliyorsunuz.
user3467349

Mevcut tüm görüntüleri kaldırmak için - "docker rmi $ (docker images -q)"
insan

Varolan tüm kapsayıcıları windows powershell kullanarak kaldırmak için: docker ps -aq | Foreach-Object { docker stop $_; docker rm $_; }
fartwhif

565

Docker görüntülerini / kapsayıcılarını kaldırmanın bazı yolları şunlardır:

Tek resmi kaldır

docker rmi image_name:version/image-id

Tüm resimleri kaldır

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

Kapları öldür ve kaldır:

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

Not: Değiştir killile stopdüzgün kapanmasına

"Resmim" dışındaki tüm resimleri kaldır

my-imageVe dışındaki tüm öğeleri kaldırmak için grep komutunu kullanınubuntu

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

Veya (awk olmadan)

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


25
Ek: "sarkan" görüntüleri kaldırmak ( docker rmi $(docker images -qf "dangling=true")
etiketsiz

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

1
Awk olmadan "Tümünü kaldır":docker rmi $(docker images --quiet | grep -v $(docker images --quiet ubuntu:my-image))
phobie

1
@kolypto "dangling = true" ifadesi, sarkmayan kapları silmiyor gibi görünüyor. Geri kalanı kaldırmak için -f ve sarkan bayrağı eksi olarak tekrar çalıştırın.
DougW

1
Sadece ben mi, yoksa bu son öneri mi (yoksa (awk olmadan)) gerçekten çalışmıyor mu?
Mike Wise

196

Tüm liman işçisi konteynerlerini sil

docker rm $(docker ps -a -q)

Tüm liman işçilerinin resimlerini sil

docker rmi $(docker images -q)

7
Etiketsiz görüntüleri kaldırın:docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
Barrett Clark

1
eq8.eu/blogs/23-spring-cleaning-for-webdevelopers sudo docker rmi -f $(sudo docker images | grep "<none>" | awk "{print \$3}") sonra ve 2015 (örn canlı bırakma etiketlerini kaldırmak için live-20150121223yapabileceğimiz) sudo docker rmi -f $(sudo docker images | grep live-2015 | awk "{print \$3}")
equivalent8

Zorlamak için şunu yazmalısınız: docker -f rm $ (docker ps -a -q)
Adrian Lopez

71

Resim kimliğini kullanarak Docker'dan bir resim kaldırmak için:

  1. Tüm Resimlerin listesini alın

    docker images
    
  2. Silmek istediğiniz görüntünün görüntü kimliğini tanımlayın, örneğin:

    REPOSITORY     TAG     IMAGE ID        CREATED        VIRTUAL SIZE
    kweku360/java  latest  08d3a9b8e166    2 weeks ago         5.733 GB`
    
  3. Son olarak, görüntü kimliğini kullanarak görüntüyü kaldırın (yalnızca ilk üç basamak gerekir)

    docker rmi 08d
    

1
İlk önce kabı durdurup çıkarmanız gerekir, bkz. Stackoverflow.com/questions/21398087/…
vikramvi

37

Resim:

  1. Görselleri listele

    liman işçisi resimleri

  2. Bir resmi kaldır

    docker rmi görüntü_adı

  3. Bir resmi kaldırmaya zorla

    liman işçisi rmi -f image_name

Konteyner:

  1. Tüm kapları listele

    docker ps -a

  2. Bir kabı çıkarın

    liman işçisi rm container_id

  3. Bir kabı kaldırmaya zorla

    liman işçisi rm -f container_id


29

Güncelleme, VonC tarafından eski Docker kapsayıcılarını kaldırma bölümünde açıklandığı gibi .

Docker 1.13 (4. Çeyrek 2016) ile artık:

docker system prune TÜM kullanılmayan verileri siler (örneğin: kapsayıcılar durduruldu, kapsayıcı olmayan hacimler ve kapsayıcı içermeyen resimler).

Bkz PR 26108 ve 86de7c0 taahhüt yardım için birkaç yeni komutlar sunuyoruz, Docker cin veri diskte alarak ve kolayca "gereksiz" aşırı temizlik sağlayan ne kadar alanın görüntülenmesi kolaylaştırmaktadır.

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

Ayrıntılı cevap için teşekkürler, ancak bu doğrudan orijinal soruyu cevaplamıyor (daha önce cevaplanmış ve en iyi cevabı hala alakalı).
Jules

2
Katılıyorum. Ancak, bu sorunun başlığı çok genel olduğundan, bu bir tür referans soru haline gelmiştir, bu yüzden mekanizma hakkında bir güncelleme vermek yerinde olduğunu düşündüm.
qkrijger

24

Kapları Çıkarma

  1. Belirli bir kapsayıcıyı kaldırmak için

    docker rm CONTAINER_ID CONTAINER_ID
    
    • Tek görüntü için

      docker rm  70c0e19168cf
      
    • Birden çok görüntü için

      docker rm  70c0e19168cf c2ce80b62174
      
  2. Çıkılan kapları çıkarın

    docker ps -a -f status=exited
    
  3. Tüm kapları çıkarın

    docker ps -q -a | xargs docker rm
    


Görüntüleri Kaldırma

docker rmi IMAGE_ID
  1. Belirli resimleri kaldırma

    • tek görüntü için

      docker rmi ubuntu
      
    • birden fazla görüntü için

      docker rmi ubuntu alpine
      
  2. Sarkan görüntüleri kaldırma
    Sarkan görüntüler, Docker görüntüleri birden çok görüntüden oluştuğundan etiketli görüntülerle hiçbir ilişkisi olmayan katmanlardır.

    docker rmi -f $(docker images -f dangling=true -q)
    
  3. Tüm Docker görüntülerini kaldır

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

Birimleri Kaldırma

Birimleri listelemek için çalıştırın docker volume ls

  1. Belirli bir birimi kaldırma

    docker volume rm VOLUME_NAME
    
  2. Sarkan hacimleri kaldır

    docker volume rm $(docker volume ls -f dangling=true -q)
    
  3. Bir kabı ve birimlerini çıkarın

    docker rm -v CONTAINER_NAME
    

Neden çift CONTAINER_ID?
Peter Mortensen

19

docker rm container_name

docker rmi image_name

docker help

rm Bir veya daha fazla kabı çıkarın

rmi Bir veya daha fazla görüntüyü kaldırma


Teşekkürler, ancak bu sorunun zaten birkaç cevabı ve neredeyse 3 yıl önce sorunu çözen seçilmiş bir cevabı var.
Jules

13
docker rmi  91c95931e552

Arka plan programından gelen hata yanıtı: Çakışma, 91c95931e552 silinemiyor çünkü 76068d66b290 kapsayıcısı kullanıyor, FATA'yı zorlamak için -f kullanın [0000] Hata: bir veya daha fazla görüntüyü kaldıramadı

Kapsayıcı kimliğini bulma,

# docker ps -a

# docker rm  daf644660736 

Bu sorunun cevabı mı?
Peter Mortensen

Neden daf644660736? Bu öncekilerden herhangi biriyle nasıl ilişkilidir?
Peter Mortensen

5

Her şeyden önce, kaldıracağımız Docker görüntüsüne bağlı Docker kaplarını durdurmalı ve kaldırmalıyız.

Bunun için önce

  • docker stop container-id - Çalışan konteyneri durdurmak için
  • docker rm container-id - Konteyneri silmek / kaldırmak için

sonra,

  • docker rmi image-id - Görüntüyü silmek / kaldırmak için

3

1.13 ve sonraki sürümler için:

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

karşılaştırma:

[OPTIONS]fark var gibi görünüyor.

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

Gönderen: Docker 1.13 ile tanışın

CLI yeniden yapılandırıldı

Docker 1.13'te, etkileşimde bulunduğu mantıksal nesnenin altında oturup her komutu yeniden gruplandırdık. Örneğin listve startkaplar artık bir alt komutlarıdır docker containerve historybir alt komutudur docker image.

Bu değişiklikler, Docker CLI sözdizimini temizlememize, yardım metnini geliştirmemize ve Docker'ın kullanımını kolaylaştırmamıza olanak tanır. Eski komut sözdizimi hala desteklenmektedir, ancak herkesi yeni sözdizimini benimsemeye teşvik ediyoruz .


3

Docker kaldırılması için bazı komutlar sağlar images.

Göster / Kaldır 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)

Ayrıca, filtergörüntü kümesini bir kerede kaldırmak için parametreleri de kullanabilirsiniz :

Misal:

$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

Böylece bu filtre görüntülerini şu şekilde silebilirsiniz:

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

1

Hepsini kullanarak sil

1. Adım: Tüm kapları öldürün

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

Adım 2: Öncelikle RM

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

3. Adım: Görüntüleri zorlayarak silin

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

Alt bağımlılıklar nedeniyle silinemediğini söyleme hatası alıyorsanız 1. adımı kullanın


1

Çıkarılan kapları otomatik olarak / periyodik olarak temizlemek ve çalışan bir kapsayıcı tarafından kullanılmayan görüntüleri ve birimleri kaldırmak istiyorsanız görüntüyü indirebilirsiniz meltwater/docker-cleanup.

Bunu günde birkaç kez birden fazla sunucuya uyguladığımız için üretimde kullanıyorum ve temizlemek için her sunucuya gitmek istemiyorum (bu bir acı olur).

Sadece koş:

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

Her 30 dakikada bir çalışır (veya DELAY_TIME = 1800 seçeneğini kullanarak uzun süredir ayarlarsınız) ve çıkan kapsayıcıları ve resimleri temizler.

Daha fazla detay: https://github.com/meltwater/docker-cleanup/blob/master/README.md


1

Etiketli (adlandırılmış) bir resmi ve kapsayıcılarını kaldırmak için bir kabuk komut dosyası. Docker-rmi olarak kaydedin ve 'docker-rmi my-image-name' kullanarak çalıştırın

#!/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

İhtiyacınız xargs -rhiçbir eşleştirme konteyner durumunda çalışması için.
gibi.

0

Neden kimse bahsetmedi docker-compose! Sadece bir haftadır kullanıyorum ve onsuz hayatta kalamam. İhtiyacınız olan tek şey, sadece birkaç dakika çalışmanızı gerektiren bir yml yazmak ve sonra gitmeye hazırsınız. Görüntüleri, kapsayıcıları (sözde hizmetlerde ihtiyaç duyulan) önyükleyebilir ve tıpkı docker yerel komutlarında kullandığınız gibi günlükleri incelemenize izin verir. Bir deneyin:

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

Docker-compose kullanmadan önce kendi kabuk betiğimi yazdım, daha sonra özellikle uygulama mimarisi değiştiğinde betiği özelleştirmek zorunda kaldım. Artık docker-compose sayesinde bunu yapmak zorunda değilim.


docker-composebir düzenleme aracıdır ve genellikle basit projelerde kullanım için pratik değildir. Bu soru bağlamında bağımsız bir dockerçözüm (sık sık hassas docker-compose.ymlyapılandırmaların kullanılmasını gerektirmeyen ) tercih edilir. Ayrıca, burada zaten çok, çok iyi cevaplar var.
Jules

@Jule hiç kimse docker-compose'den bahsetmediği için kötü cevaplar olduğu anlamına gelmez ve bunun da çaresiz bir cevap olduğu anlamına gelmez. Docker yerel komutları kötü değil, sıkıcıdır ve her seferinde oldukça fazla yazmayı gerektirir. "Biri iyi, iki tanesi çok fazla".
Tiina

-1

Benim için aşağıdakiler iyi çalış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

Ardından devam edin ve aşağıdaki gibi bazı görüntüleri çalıştırarak bir resmi kaldırın:

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

-1

Liste resimleri:

ahanjura@ubuntu:~$ sudo docker images

DEPOLAMA ETİKETİ ID ID OLUŞTURilmiş BOYUT 88282f8eda00 19 saniye önce 308.5 MB 13e5d3d682f4 19 saat önce 663 MB busybox2 son 05fe66bb1144 20 saat önce 1.129 MB ubuntu 16.04 00fd29ccc6f1 5 gün önce 110.5 MB ubuntu 14.04 6780 2280 gün önce busybox En son 6ad733544a63 6 hafta önce 1.129 MB ubuntu 16.10 7d3f705d307c 5 ay önce 106.7 MB

Resimleri sil:

ahanjura@ubuntu:~$ sudo docker rmi 88282f8eda00

Silinmiş: sha256: 88282f8eda0036f85b5652c44d158308c6f86895ef1345dfa788318e6ba31194 Silinmiş: sha256: 4f211a991fb392cd794bc9ad8833149cd9400c5955958c4017b1e2dc415e25e9 Silinmiş: sha256: 8cc6917ac7f0dcb74969ae7958fe80b4a4ea7b3223fc888dfe1aef42f43df6f8 Silinmiş: sha256: b74a8932cff5e61c3fd2cc39de3c0989bdfd5c2e5f72b8f99f2807595f8ece43

ahanjura@ubuntu:~$ sudo docker rmi 13e5d3d682f4

Arka plan programından hata yanıtı: çakışma: 13e5d3d682f4 silinemiyor (zorlanmalıdır) - resim durdurulan konteyner tarafından kullanılıyor 5593e25eb638

Zorla sil:

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

Silinmiş: sha256: 13e5d3d682f4de973780b35a3393c46eb314ef3db45d3ae83baf2dd9d702747e Silinmiş: sha256: 3ad9381c7041c03768ccd855ec86caa6bc0244223f10b0465c4898bdb21dc378 Silinmiş: sha256: 5ccb917bce7bc8d3748eccf677d7b60dd101ed3e7fd2aedebd521735276606af Silinmiş: sha256: 18356d19b91f0abcc04496729c9a4c49e695dbfe3f0bb1c595f30a7d4d264ebf


-1

Benim durumumda probleme, aynı ada sahip yedekte görüntülerin olması, çözümün ad veya kimliğin ardından etiketi eklemektir.

sudo docker rmi <NAME>:<TAG>

örn:

sudo docker rmi php:7.0.4-fpm
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.