Αυτή η ερώτηση σχετίζεται με το https://stackoverflow.com/questions/17014263/should-i-be-concerned-about-excess-non-running-docker-containers.
Αναρωτιέμαι πώς μπορώ να αφαιρέσω τα παλιά κοντέινερ. Το docker rm 3e552code34a
σας επιτρέπει να αφαιρέσετε ένα μόνο, αλλά έχω ήδη πολλά. Το docker rm --help
δεν δίνει επιλογή επιλογής (όπως όλα, ή με βάση το όνομα της εικόνας).
Ίσως υπάρχει κάποιος κατάλογος στον οποίο αποθηκεύονται αυτά τα containers όπου μπορώ να τα διαγράψω εύκολα με το χέρι;
Από το Docker 1.13.x μπορείτε να χρησιμοποιήσετε το Docker container prune:
docker container prune
Αυτό θα αφαιρέσει όλα τα σταματημένα κοντέινερ και θα πρέπει να λειτουργεί σε όλες τις πλατφόρμες με τον ίδιο τρόπο.
Υπάρχει επίσης ένα Docker system prune:
docker system prune
η οποία θα καθαρίσει όλα τα αχρησιμοποίητα containers, δίκτυα, εικόνες (τόσο κρεμασμένες όσο και μη αναφερόμενες), και προαιρετικά, τόμους, με μία εντολή.
Για παλαιότερες εκδόσεις του Docker, μπορείτε να συνδέσετε τις εντολές του Docker με άλλες εντολές του Unix για να πάρετε αυτό που χρειάζεστε. Ακολουθεί ένα παράδειγμα για το πώς να καθαρίσετε παλιά containers που είναι εβδομάδων:
$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm
Για να δώσουμε τα εύσημα, όπου πρέπει, αυτό το παράδειγμα είναι από το https://twitter.com/jpetazzo/status/347431091415703552.
Μια άλλη μέθοδος, την οποία πήρα από τον Guillaume J. Charmes (τα εύσημα εκεί που οφείλονται):
docker rm `docker ps --no-trunc -aq`
θα αφαιρέσει όλα τα δοχεία με έναν κομψό τρόπο.
Και από τον Bartosz Bilicki, για τα Windows:
FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i
Για το PowerShell:
docker rm @(docker ps -aq)
Μια ενημέρωση με το Docker 1.13 (Q4 2016), credit to VonC (αργότερα σε αυτό το νήμα):
`docker system prune
θα διαγράψει ΟΛΑ τα αχρησιμοποίητα δεδομένα (δηλαδή, με τη σειρά: σταματημένα containers, τόμοι χωρίς containers και εικόνες χωρίς containers).
Βλέπε PR 26108 και commit 86de7c0, τα οποία εισάγουν μερικές νέες εντολές για να διευκολύνουν την οπτικοποίηση του χώρου που καταλαμβάνουν τα δεδομένα του Docker daemon στο δίσκο και επιτρέπουν τον εύκολο καθαρισμό της περίσσειας "μη απαραίτητης".
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
Πρώτον, σταματήστε τα κοντέινερ που εκτελούνται πριν επιχειρήσετε να τα αφαιρέσετε
docker rm $(docker stop -t=1 $(docker ps -q))
Θα μπορούσατε να χρησιμοποιήσετε το kill
αντί του stop
. Στην περίπτωσή μου προτιμώ το stop
αφού τείνω να τα επαναλαμβάνω αντί να δημιουργώ ένα νέο κάθε φορά, οπότε προσπαθώ να τα κλείνω όμορφα.
Σημείωση: Αν προσπαθήσετε να σταματήσετε έναν περιέκτη, θα λάβετε ένα σφάλμα:
Error: Αδύνατον να αφαιρέσετε ένα τρέχον εμπορευματοκιβώτιο, παρακαλώ σταματήστε το πρώτα
docker rm $(docker ps -a -q)