Esta pregunta está relacionada con ¿Debería preocuparme el exceso de contenedores Docker que no funcionan? .
Me pregunto cómo quitar los contenedores viejos. El docker rm 3e552code34a
le permite quitar una sola, pero tengo un montón ya. docker rm --help
no ofrece una opción de selección (como todas 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?
docker run
con el--rm
indicador que haría que el contenedor sea efímero, eliminando todos los archivos del contenedor después de la ejecución.docker system prune
comando. Vea mi respuesta a continuación .Portainer
Podemos administrarall the old containers, non using volumes and images
mediante esta herramienta Es una interfaz de usuario de administración simple para los acopladoresPlease refer my update below on how to deploy the application
Respuestas:
Desde Docker 1.13.x puede usar la poda de contenedores Docker :
Esto eliminará todos los contenedores detenidos y debería funcionar en todas las plataformas de la misma manera.
También hay una poda del sistema Docker :
que limpiará todos los contenedores no utilizados, redes, imágenes (colgantes y sin referencia) y, opcionalmente, volúmenes, en un solo comando.
Para versiones anteriores de Docker, puede encadenar comandos de Docker junto con otros comandos de Unix para obtener lo que necesita. Aquí hay un ejemplo sobre cómo limpiar contenedores viejos que tienen semanas de antigüedad:
Para dar crédito, donde es debido, este ejemplo es de https://twitter.com/jpetazzo/status/347431091415703552 .
fuente
docker images | grep "<none>" | awk '{print $3}' | xargs docker rmi
-rm
opción para eliminar contenedores intermedios después de una compilación exitosa.docker ps -a | awk 'NR > 1 {print $1}' | xargs docker rm
docker rmi $(docker images -q -f dangling=true)
Otro método, que obtuve de Guillaume J. Charmes (crédito donde es debido):
eliminará todos los contenedores de una manera elegante.
Y por Bartosz Bilicki, para Windows:
Para PowerShell:
Una actualización con Docker 1.13 (Q4 2016), crédito a VonC ( más adelante en este hilo ):
docker system prune
eliminará TODOS los datos no utilizados (es decir, en orden: contenedores detenidos, volúmenes sin contenedores e imágenes sin contenedores).Consulte PR 26108 y confirme 86de7c0 , que presenta algunos comandos nuevos para ayudar a facilitar la visualización de cuánto espacio ocupan los datos del demonio Docker en el disco y permite limpiar fácilmente el exceso "innecesario".
fuente
docker ps -a -q | xargs docker rm
funciona (sudo puede ser necesario)docker rm $(docker ps -a -q)
?--no-trunc
yadocker rm
que no necesita ID completos de todos modos.Respuesta actualizada Use
docker system prune
odocker container prune
ahora. Ver la respuesta actualizada de VonC .Respuesta anterior Al componer varias sugerencias diferentes anteriores, la forma más elegante de eliminar todos los contenedores que no se ejecutan parece ser:
docker rm $(docker ps -q -f status=exited)
-q
imprime solo los identificadores del contenedor (sin encabezados de columna)-f
le permite filtrar su lista de contenedores impresos (en este caso, estamos filtrando para mostrar solo los contenedores salidos)fuente
-v
para evitar colgando volúmenes:docker rm -v $(docker ps -q -f status=exited)
. Consulte docs.docker.com/userguide/dockervolumes/… para obtener detalles sobre los volúmenes colgantes.alias docker-gc="docker rm -v \$(docker ps -q -f status=exited)"
La forma oficial es:
Los mantenedores de Docker han indicado que no habrá un comando para esto, y usted compone los comandos así:
fuente
docker volume
subcomando y volúmenes con nombre.Con Docker 1.13 (cuarto trimestre de 2016), ahora tiene:
docker system prune -a
eliminará TODOS los datos no utilizados (es decir, en orden: contenedores detenidos, volúmenes sin contenedores e imágenes sin contenedores).docker system prune
sin -a eliminará (para imágenes) solamente colgando las imágenes o imágenes sin una etiqueta, como se ha comentado por smilebomb .Consulte PR 26108 y confirme 86de7c0 , que presenta algunos comandos nuevos para ayudar a facilitar la visualización de cuánto espacio ocupan los datos del demonio Docker en el disco y permite limpiar fácilmente el exceso "innecesario".
Como comenta wjv ,
Introducido en commit 913e5cb , solo para Docker 1.13+.
fuente
-f
bandera para forzar la limpieza sin hacer preguntas.docker system prune -a
, que elimina las imágenes no utilizadas.docker system prune
solo elimina imágenes colgantes o imágenes sin etiqueta.Ahora es posible usar el filtrado con
docker ps
:Y para imágenes :
Sin embargo, cualquiera de ellos causará
docker rm
odocker rmi
arrojará un error cuando no haya contenedores coincidentes. El viejodocker rm $(docker ps -aq)
truco fue aún peor, ya que trató de eliminar cualquier contenedor en ejecución, fallando en cada uno.Aquí hay un script más limpio para agregar en su
~/.bashrc
o~/.profile
:Editar: como se indica a continuación, la respuesta original fue para eliminar imágenes, no contenedores. Actualizado para responder a ambos, incluidos nuevos enlaces a la documentación. Gracias a Adrian (y la respuesta de Ryan) por mencionar el nuevo
ps
filtrado.fuente
storage
contenedores.status=created
para obtener los que no se están ejecutando y nunca se han ejecutado.ACTUALIZADO 2019 (MÁS NUEVO)
Esta manera 2017 (ANTIGUA)
Para eliminar TODOS LOS CONTENEDORES DETENIDOS
Para eliminar TODOS LOS CONTENEDORES (DETENIDOS Y NO DETENIDOS)
fuente
docker volume/container/image prune
, mira stackoverflow.com/a/39860665/3625317Retire todos los contenedores detenidos:
Del comentario de pauk960 :
fuente
Si no desea eliminar todos los contenedores, puede seleccionar todos los contenedores creados antes o después de un contenedor específico con
docker ps --before <container-ID>
o condocker ps --since <container-ID>
. Esta característica es al menos en Docker versión 0.6.5.Digamos que ha desarrollado su sistema y ahora está funcionando, pero quedan varios contenedores. Desea eliminar los contenedores creados antes de esa versión de trabajo. Determine la ID del contenedor de trabajo con
docker ps
.Eliminar contenedores creados antes de otro contenedor
Otro ejemplo. Ya tiene su base de datos ejecutándose en un contenedor Docker. Ha desarrollado su aplicación para ejecutarse en otro contenedor y ahora tiene varios contenedores innecesarios.
Eliminar contenedores creados después de cierto contenedor
Docker almacena contenedores
/var/lib/docker/containers
en Ubuntu. Creo que los contenedores adicionales no causan ningún otro daño, pero ocupan espacio en disco.fuente
Actualización: a partir de Docker versión 1.13 (lanzada en enero de 2017), puede emitir el siguiente comando para limpiar contenedores detenidos, volúmenes no utilizados, imágenes colgantes y redes no utilizadas:
Si desea asegurarse de que solo está eliminando contenedores que tienen un
exited
estado, use esto:Del mismo modo, si está limpiando cosas de la ventana acoplable, puede deshacerse de las imágenes sin etiqueta y sin nombre de esta manera:
fuente
Aquí está mi
docker-cleanup
script, que elimina contenedores e imágenes sin etiquetar. Por favor, consulte la fuente para cualquier actualización.Fuente: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup
fuente
xargs --no-run-if-empty
opciónPrimero, deje de ejecutar contenedores antes de intentar eliminarlos
Eliminar contenedores en ejecución
Podrías usar en
kill
lugar destop
. En mi caso, prefierostop
ya que tiendo a volver a ejecutarlos en lugar de crear uno nuevo cada vez, así que trato de cerrarlos bien.Nota: Intentar detener un contenedor le dará un error:
Retire todos los contenedores
fuente
Eliminar todos los contenedores del shell de Windows:
fuente
https://github.com/HardySimpson/docker-cleanup
Limpieza de Docker
Una pequeña carcasa todo en uno, que elimina:
Tiene la intención de ejecutarse como un trabajo crontab
Característica
<none>:<none>
imágenes.2>/dev/null
o nofuente
Por lo tanto, personalmente recomiendo hacer esto como parte de su script de implementación para imágenes y contenedores, manteniendo solo los n contenedores e imágenes más recientes. Etiqueto mis imágenes de Docker con el mismo esquema de versiones que utilizo
git tag
y siempre etiqueto la última imagen de Docker con "último". Esto significa que sin limpiar nada, mis imágenes de Docker terminan pareciendo:Ahora, por supuesto, no quiero mantener todas mis imágenes (o contenedores) volviendo a perpetuidad en todas mis cajas de producción. Solo quiero los últimos 3 o 4 para retrocesos y deshacerme de todo lo demás. Unix
tail
es tu mejor amigo aquí. Desdedocker images
ydocker ps
ambos ordenados por fecha, podemos usartail
para seleccionar todos menos los tres primeros y eliminarlos:Ejecútelo junto con sus scripts de implementación (o localmente) para mantener siempre las imágenes suficientes para retroceder cómodamente sin ocupar demasiado espacio o desordenar las imágenes antiguas.
Personalmente, solo mantengo un contenedor en mi caja de producción en cualquier momento, pero puedes hacer lo mismo con los contenedores si quieres más:
Finalmente, en mi ejemplo simplificado, solo estamos tratando con un repositorio a la vez, pero si tuviera más, puede volverse un poco más sofisticado con la misma idea. Digamos que solo quiero mantener las últimas tres imágenes de some_repo / some_image. Yo sólo puede mezclar en
grep
yawk
y estar en mi camino:Una vez más, la misma idea se aplica a los contenedores, pero ya lo entiendes, así que dejaré de dar ejemplos.
fuente
Utilizar:
Se detiene con fuerza y elimina todos los contenedores presentes localmente.
fuente
sudo docker rm -f $(sudo docker ps -a -q)
.sudo
es necesario en todas partes a menos que agregue su usuario al grupo 'acoplador'. Uso ubuntu 16.10 sin sudo agregando mi usuario al grupo docker.Retire 5 contenedores más antiguos:
Vea cuántos contenedores quedan:
fuente
Retire todos los contenedores detenidos.
Esto eliminará todos los contenedores detenidos al obtener una lista de todos los contenedores con docker ps -a -q y pasar sus identificadores a docker rm. Esto no debería eliminar ningún contenedor en ejecución, y le dirá que no puede eliminar una imagen en ejecución.
Eliminar todas las imágenes sin etiquetar
Ahora desea limpiar imágenes antiguas para ahorrar espacio.
fuente
docker ps -aq | xargs docker rm -v
docker rm -f $(docker ps -a -q)
funciona en PowerShell / Docker para Windows.Nueva forma: spotify / docker-gc juega el truco.
Ha soportado configuraciones ambientales
Forzar la eliminación de imágenes que tienen múltiples etiquetas
Forzar la eliminación de contenedores
Excluyendo contenedores e imágenes salidos recientemente de la recolección de basura
Esta configuración también evita la eliminación de imágenes que se crearon hace menos de GRACE_PERIOD_SECONDS segundos.
Carrera en seco
Limpieza de volúmenes de contenedores huérfanos CLEAN_UP_VOLUMES = 1
Referencia: docker-gc
Antigua forma de hacer:
eliminar contenedores antiguos que no se ejecutan
eliminar todas las imágenes asociadas con contenedores acoplables que no se ejecutan
limpieza de volúmenes de Docker huérfanos para Docker versión 1.10.xy superior
Basado en el periodo de tiempo
fuente
Eliminar todos los procesos de docker:
Eliminar contenedor específico:
fuente
Puede usar el siguiente comando para eliminar los contenedores salidos:
Aquí está la esencia completa para eliminar también las imágenes antiguas en Docker : Gist para eliminar los contenedores e imágenes Docker antiguos .
fuente
fuente
Siempre uso
docker rmi $(docker ps -a -q)
para eliminar todas las imágenes.Puede eliminar el directorio
/var/lib/docker/graph
cuandodocker rmi
falla.fuente
Solo puede eliminar los contenedores detenidos. Detenlos a todos al principio
docker stop $(docker ps -a -q)
Entonces puedes eliminar
docker rm $(docker ps -a -q)
fuente
Pruebe este comando para limpiar contenedores y colgar imágenes.
fuente
Los pasos básicos para detener / eliminar todos los contenedores e imágenes
Listar todos los contenedores
docker ps -aq
Detenga todos los contenedores en funcionamiento.
docker stop $(docker ps -aq)
Retire todos los contenedores
docker rm $(docker ps -aq)
Eliminar todas las imágenes
docker rmi $(docker images -q)
Nota: Primero debe detener todos los contenedores en ejecución antes de eliminarlos. Además, antes de eliminar una imagen, debe detener y eliminar sus contenedores dependientes.
fuente
Para cualquier persona interesada, tomé el ejemplo de qkrijger y lo convertí en un todo claro (detener y eliminar todo)
fuente
docker rm -f $(docker ps --no-trunc -aq)
es más rápidofuente
fuente
Estoy usando:
para eliminar contenedores salidos y:
para deshacerse de todas las imágenes sin etiquetar.
fuente