Come rimuovere i vecchi contenitori Docker

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?

Soluzione

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.

Commentari (21)

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
Commentari (20)

Per prima cosa, fermare i container in esecuzione prima di tentare di rimuoverli

Rimuovi i container in esecuzione

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

Rimuovi tutti i contenitori

docker rm $(docker ps -a -q)
Commentari (0)