Questa domanda è legata a https://stackoverflow.com/questions/17014263/should-i-be-concerned-about-excess-non-running-docker-containers.
Mi sto chiedendo come rimuovere i vecchi contenitori. Il docker rm 3e552code34a
permette di rimuoverne uno solo, ma ne ho già molti. docker rm --help
non dà un'opzione di selezione (come tutti, o per nome dell'immagine).
Forse c'è una directory in cui questi contenitori sono memorizzati dove posso eliminarli facilmente manualmente?
A partire da Docker 1.13.x puoi usare Docker container prune:
docker container prune
Questo rimuoverà tutti i contenitori fermi e dovrebbe funzionare su tutte le piattaforme allo stesso modo.
C'è anche un Docker system prune:
docker system prune
che pulirà tutti i contenitori inutilizzati, le reti, le immagini (sia dangling che non referenziate) e, opzionalmente, i volumi, in un solo comando.
Per le vecchie versioni di Docker, è possibile stringere i comandi Docker insieme ad altri comandi Unix per ottenere ciò di cui si ha bisogno. Ecco un esempio su come ripulire i vecchi container che sono vecchi di settimane:
$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm
Per dare credito, dove è dovuto, questo esempio è da https://twitter.com/jpetazzo/status/347431091415703552.
Un altro metodo, che ho preso da Guillaume J. Charmes (credito dovuto):
docker rm `docker ps --no-trunc -aq`
rimuoverà tutti i contenitori in modo elegante.
E da Bartosz Bilicki, per Windows:
FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i
Per PowerShell:
docker rm @(docker ps -aq)
Un aggiornamento con Docker 1.13 (Q4 2016), credito a VonC (più avanti in questo thread):
docker system prune
cancellerà TUTTI i dati inutilizzati (cioè, in ordine: contenitori fermi, volumi senza contenitori e immagini senza contenitori).
Vedi PR 26108 e commit 86de7c0, che stanno introducendo alcuni nuovi comandi per facilitare la visualizzazione di quanto spazio i dati del demone Docker stanno prendendo su disco e permettendo di pulire facilmente l'eccesso "non necessario".
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
Per prima cosa, fermare i container in esecuzione prima di tentare di rimuoverli
docker rm $(docker stop -t=1 $(docker ps -q))
Potresti usare kill
invece di stop
. Nel mio caso preferisco stop
dato che tendo a rieseguirli invece di crearne uno nuovo ogni volta, quindi cerco di chiuderli bene.
Nota: Cercare di fermare un contenitore vi darà un errore:
Errore: Impossibile rimuovere un contenitore in esecuzione, per favore fermalo prima
docker rm $(docker ps -a -q)