2013-06-09 10 views
115

Każde polecenie docker run lub każde polecenie RUN wewnątrz pliku Dockerfile tworzy kontener. Jeśli pojemnik nie jest już uruchomiony, nadal można go zobaczyć pod numerem docker ps -a.Czy powinienem być zaniepokojony nadmiernymi, nie działającymi kontenerami Docker?

Czy powinienem zajmować się ogromną listą niedziałających pojemników? Czy powinienem wystawiać docker rm na niepracujące pojemniki?

Nie jestem pewien, jakie nakłady lub pamięci/kary za przechowywanie ponoszą te niepracujące pojemniki.

+1

Polecenie 'docker exec' zostało dodane przed chwilą, patrz https://docs.docker.com/reference/commandline/cli/#exec - spowoduje wykonanie polecenia z uruchomionego kontenera. – schmunk

+0

FYI, jeśli chcesz zobaczyć, jak usunąć stare pojemniki, zobacz to pytanie: http://stackoverflow.com/questions/17236796/how-to-remove-old-docker-containers/29474367 –

+1

@schmunk Link został przeniesiony . https://docs.docker.com/engine/reference/commandline/exec/ – akauppi

Odpowiedz

56

Kontenery, które nie są uruchomione, nie pobierają żadnych zasobów systemowych poza miejscem na dysku.

Zazwyczaj dobrze jest posprzątać po sobie, ale jeśli masz ich dużo, nie powinno to spowolnić pracy.

Jeśli zauważysz spowolnienie podczas uruchamiania poleceń dokowania z wieloma zatrzymanymi kontenerami, może to być błąd w dokowaniu i należy przesłać błąd.

+1

Dokumenty dla polecenia 'RUN' zostały teraz przeniesione do: http://docs.docker.io/en/latest/reference/builder/ #run – aculich

59

docker run documentation opisano sposób automatycznego czyszczenia zbiornika i usunąć z systemu plików po wyjściu kontenerów:

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

Powyższe pokazuje, że domyślnie pojemniki nie są usuwane, ale dodanie --rm=true czy tylko krótko- ręka --rm będzie działać tak:

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

po wyjściu ze zbiornika zostanie on automatycznie usunięty.

Można to sprawdzić przez wystawiania pojemników Döcker w jednym oknie terminala:

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

A potem w innym oknie uruchomienia tego polecenia, aby uruchomić wiele pojemników Döcker że będzie wszystko automatycznie zjazd po spania dla maksymalnie 10 sekund .

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

Brak bezpośredniej odpowiedzi na * pytanie *, ale interesująca odpowiedź, która da użytkownikom wgląd w mechanizmy kryjące się za dosem. Dzięki! – thaJeztah

+3

'-rm' jest przestarzałe i zostanie usunięte w pewnym momencie, należy zamiast tego użyć' --rm'. – bain

+1

"-rm'" został już usunięty – Vanuan

5

Jeśli prowadzisz pojemnik o pojemności nie używać Döcker rm -v, aby go usunąć, a następnie objętość nie jest usuwany po wyjęciu pojemnika. Istnieje również issue ze sterownikiem pamięci vfs. Jeśli zapomnisz wyczyścić, woluminy pochłoną Twoją przestrzeń dyskową.

Powiązane problemy