Fazla, çalışmayan Docker kapları hakkında endişelenmeli miyim?


142

Her docker runkomut veya RUNbir Dockerfile içindeki her komut bir kap oluşturur. Konteynır artık çalışmıyorsa hala ile görülebilir docker ps -a.

Çok sayıda çalışmayan kapsayıcıya sahip olmamdan endişelenmeli miyim? Akmayan docker rmkonteynerlere mi çıkmalıyım?

Bu çalışmayan konteynerlerin hangi performans veya bellek / depolama cezalarından kaynaklandığından emin değilim.


1
Bir docker execsüre önce bir komut eklendi, bkz. Docs.docker.com/reference/commandline/cli/#exec - çalışan bir kapsayıcıdan bir komut yürütecek.
schmunk

Bilginize, eski kapların nasıl kaldırılacağını görmek istiyorsanız, şu soruya bakın: stackoverflow.com/questions/17236796/…
Ryan Walls

1
@schmunk Bağlantı taşındı. docs.docker.com/engine/reference/commandline/exec
akauppi

Yanıtlar:


72

Çalışmayan kapsayıcılar disk alanının yanı sıra sistem kaynağı almıyor.

Kendinizden sonra temizlemek genellikle iyidir, ancak etrafta oturan birçoğunuz varsa, performansı hiç yavaşlatmamalıdır.

Çok sayıda durdurulmuş kapsayıcıyla docker komutlarını çalıştırırken bir yavaşlama fark ederseniz, bu docker'da bir hata olabilir ve bir hata göndermelisiniz.


1
RUNKomutun dokümanları artık şu adrese
aculich

63

docker runDokümantasyon otomatik olarak konteyner çıkışları dosya sistemini kabını temizlemek ve kaldırmak açıklamaktadır:

  --rm=false: Automatically remove the container when it exits (incompatible with -d)

Yukarıdaki, varsayılan olarak kapların kaldırılmadığını, ancak ekleme --rm=trueveya yalnızca kısa elin --rmböyle çalışacağını gösterir:

sudo docker run -i -t --rm ubuntu /bin/bash

Kaptan çıktığınızda otomatik olarak kaldırılır.

Docker kaplarınızı bir terminal penceresinde listeleyerek bunu test edebilirsiniz:

watch -n1 'sudo ls -c /var/lib/docker/containers'

Ve sonra başka bir pencerede, 10 saniyeye kadar uyuduktan sonra otomatik olarak çıkacak birden fazla liman işçisi konteyneri çalıştırmak için bu komutu çalıştırın.

for i in {1..10}; do sudo docker run --rm ubuntu /bin/sleep $i & done

4
Soruya doğrudan bir cevap değil , kullanıcılara liman işçisinin arkasındaki mekanizmalar hakkında bilgi verecek ilginç bir cevap. Teşekkürler!
thaJeztah

3
-rmkullanımdan kaldırıldı ve bir süre sonra kaldırılacak, --rmbunun yerine kullanın.
bain

5

Bir kapsayıcıyı çalıştırır ve kaldırmak için docker rm -v komutunu kullanmazsanız , bir kap kaldırıldıktan sonra birim kaldırılmaz. Ayrıca bir vfs depolama sürücüsü ile ilgili bir sorun var. Temizlemeyi unutursanız, disk alanınız birimler tarafından tüketilir.


2

Bu çalışmayan konteynerlerin hangi performans veya bellek / depolama cezalarından kaynaklandığından emin değilim.

Çalışmayan Docker kapsayıcılarının ne kadar depolama alanı kullandığını değerlendirmek için şunları çalıştırabilirsiniz:

docker ps --size --filter "status=exited"

Aynı şekilde şunları da çalıştırabilirsiniz:docker container ls --filter "status=exited"

docker system dfDocker disk kullanımını görmek için (Docker 1.13.0, Ocak 2017'de tanıtıldı) komutunu da kullanabilirsiniz , örneğin:

username@server:~$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              44                  28                  114.7GB             84.84GB (73%)
Containers          86                  7                   62.43GB             41.67GB (66%)
Local Volumes       2                   1                   0B                  0B
Build Cache                                                 0B                  0B
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.