Hvordan fjerne gamle Docker-containere

Dette spørsmålet er relatert til https://stackoverflow.com/questions/17014263/should-i-be-concerned-about-excess-non-running-docker-containers.

Jeg lurer på hvordan jeg fjerner gamle containere. Med docker rm 3e552code34a kan du fjerne en enkelt, men jeg har mange allerede. docker rm --help gir ikke et valgalternativ (som alle, eller etter bilde navn).

Kanskje det er en katalog der disse beholderne er lagret der jeg enkelt kan slette dem manuelt?

Løsning

Siden Docker 1.13.x kan du bruke Docker container prune:

docker container prune

Dette vil fjerne alle stoppede containere og bør fungere på alle plattformer på samme måte.

Det finnes også en Docker system prune:

docker system prune

som vil rydde opp i alle ubrukte containere, nettverk, bilder (både dinglende og ikke-refererte), og eventuelt volumer, i en kommando.


For eldre Docker-versjoner kan du koble Docker-kommandoer sammen med andre Unix-kommandoer for å få det du trenger. Her er et eksempel på hvordan du rydder opp i gamle containere som er flere uker gamle:

$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm

For å gi kreditt, der det skyldes, er dette eksemplet fra https://twitter.com/jpetazzo/status/347431091415703552.

Kommentarer (21)

En annen metode, som jeg fikk fra Guillaume J. Charmes (æren er hans):

docker rm `docker ps --no-trunc -aq`

vil fjerne alle beholdere på en elegant måte.

Og av Bartosz Bilicki, for Windows:

FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i

For PowerShell:

docker rm @(docker ps -aq)

En oppdatering med Docker 1.13 (Q4 2016), kreditt til VonC (senere i denne tråden):

docker system prune vil slette ALLE ubrukte data (dvs. i rekkefølge: containere stoppet, volumer uten containere og bilder uten containere).

Se PR 26108 og commit 86de7c0, som introduserer noen få nye kommandoer for å gjøre det lettere å visualisere hvor mye plass Docker-demon-dataene tar på disken og gjør det enkelt å rydde opp i "unødvendig" overflødig.

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

Først må du slutte å kjøre containere før du forsøker å fjerne dem.

Fjern løpende containere

docker rm $(docker stop -t=1 $(docker ps -q))

Du kan bruke kill i stedet for stop. I mitt tilfelle foretrekker jeg stop siden jeg har en tendens til å kjøre dem på nytt mot å lage en ny hver gang, så jeg prøver å stenge dem pent.

Merk: Hvis du prøver å stoppe en container, får du en feil:

Feil: Umulig å fjerne en container som kjører, vennligst stopp den først.

Fjern alle containere

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