Esta pregunta está relacionada con https://stackoverflow.com/questions/17014263/should-i-be-concerned-about-excess-non-running-docker-containers.
Me pregunto cómo eliminar los contenedores antiguos. El docker rm 3e552code34a
permite eliminar uno solo, pero ya tengo muchos. El comando docker rm --help
no da una opción de selección (como todos, o por nombre de imagen).
¿Tal vez hay un directorio en el que se almacenan estos contenedores donde puedo eliminarlos fácilmente de forma manual?
Desde Docker 1.13.x puedes utilizar Docker container prune:
docker container prune
Esto eliminará todos los contenedores detenidos y debería funcionar en todas las plataformas de la misma manera.
También hay un Docker system prune:
docker system prune
que limpiará todos los contenedores, redes, imágenes (tanto las colgantes como las no referenciadas) y, opcionalmente, los volúmenes no utilizados, en un solo comando.
Para las versiones más antiguas de Docker, puedes encadenar los comandos de Docker con otros comandos de Unix para conseguir lo que necesitas. Aquí hay un ejemplo de cómo limpiar contenedores viejos que tienen semanas de antigüedad:
$ docker ps --filter "status=exited" | grep 'weeks ago' | awk '{print $1}' | xargs --no-run-if-empty docker rm
Para dar crédito, donde es debido, este ejemplo es de https://twitter.com/jpetazzo/status/347431091415703552.
Otro método, que obtuve de Guillaume J. Charmes (el mérito es mío):
docker rm `docker ps --no-trunc -aq`
eliminará todos los contenedores de una manera elegante.
Y por Bartosz Bilicki, para Windows:
FOR /f "tokens=*" %i IN ('docker ps -a -q') DO docker rm %i
Para PowerShell:
docker rm @(docker ps -aq)
Una actualización con Docker 1.13 (Q4 2016), crédito a VonC (más adelante en este hilo):
docker system prune
borrará TODOS los datos no utilizados (es decir, por orden: contenedores parados, volúmenes sin contenedores e imágenes sin contenedores).
Ver PR 26108 y commit 86de7c0, que introducen algunos comandos nuevos para facilitar la visualización de cuánto espacio están ocupando los datos del demonio Docker en el disco y permitir la limpieza fácil del exceso "innecesario".
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
En primer lugar, detenga los contenedores en funcionamiento antes de intentar eliminarlos
docker rm $(docker stop -t=1 $(docker ps -q))
Puedes usar kill
en lugar de stop
. En mi caso prefiero stop
ya que tiendo a volver a ejecutarlos en lugar de crear uno nuevo cada vez, así que intento cerrarlos bien.
Nota: Intentar detener un contenedor te dará un error:
Error: Imposible eliminar un contenedor en ejecución, por favor deténgalo primero
docker rm $(docker ps -a -q)