tag - dockers container download




Cómo quitar los viejos contenedores Docker (20)

Esta pregunta está relacionada con ¿Debería preocuparme el exceso de contenedores Docker que no se ejecutan? .

Me pregunto cómo quitar los contenedores viejos. La docker rm 3e552code34a permite eliminar una sola, pero ya tengo muchas. docker rm --help no da 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.


Eliminar todos los contenedores creados a partir de una determinada imagen:

docker rm  $(docker ps -a | awk '/myimage:mytag/{print $1}')

Los pasos básicos para detener / eliminar todos los contenedores e imágenes.

  1. Listar todos los contenedores

    docker ps -aq

  2. Detener todos los contenedores en ejecución

    docker stop $(docker ps -aq)

  3. Quitar todos los contenedores

    docker rm $(docker ps -aq)

  4. Eliminar todas las imagenes

    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.


Ahora es posible utilizar el filtering con el docker ps :

docker rm $(docker ps -q -f status=exited)

Y para las images :

docker rmi $(docker images -q -f "dangling=true")

Sin embargo, cualquiera de ellos provocará que docker rm o docker rmi un error cuando no haya contenedores coincidentes. El truco anterior docker rm $(docker ps -aq) 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 tu ~/.bashrc o ~/.profile :

# Use `docker-cleanup --dry-run` to see what would be deleted.

function docker-cleanup {
  EXITED=$(docker ps -q -f status=exited)
  DANGLING=$(docker images -q -f "dangling=true")

  if [ "$1" == "--dry-run" ]; then
    echo "==> Would stop containers:"
    echo $EXITED
    echo "==> And images:"
    echo $DANGLING
  else
    if [ -n "$EXITED" ]; then
      docker rm $EXITED
    else
      echo "No containers to remove."
    fi
    if [ -n "$DANGLING" ]; then
      docker rmi $DANGLING
    else
      echo "No images to remove."
    fi
  fi
}

Edición: como se indica a continuación, la respuesta original fue para eliminar imágenes, no contenedores. Actualizado para responder a ambos, incluyendo nuevos enlaces a la documentación. Gracias a Adrian (y la respuesta de Ryan) por mencionar el nuevo filtro de ps .


Aquí está mi script de docker-cleanup , que elimina contenedores e imágenes sin etiquetar. Por favor, consulte la fuente para las actualizaciones.

#!/bin/sh
# Cleanup docker files: untagged containers and images.
#
# Use `docker-cleanup -n` for a dry run to see what would be deleted.

untagged_containers() {
  # Print containers using untagged images: $1 is used with awk's print: 0=line, 1=column 1.
  docker ps -a | awk '$2 ~ "[0-9a-f]{12}" {print $'$1'}'
}

untagged_images() {
  # Print untagged images: $1 is used with awk's print: 0=line, 3=column 3.
  # NOTE: intermediate images (via -a) seem to only cause
  # "Error: Conflict, foobarid wasn't deleted" messages.
  # Might be useful sometimes when Docker messed things up?!
  # docker images -a | awk '$1 == "<none>" {print $'$1'}'
  docker images | tail -n +2 | awk '$1 == "<none>" {print $'$1'}'
}

# Dry-run.
if [ "$1" = "-n" ]; then
  echo "=== Containers with uncommitted images: ==="
  untagged_containers 0
  echo

  echo "=== Uncommitted images: ==="
  untagged_images 0

  exit
fi

# Remove containers with untagged images.
echo "Removing containers:" >&2
untagged_containers 1 | xargs --no-run-if-empty docker rm --volumes=true

# Remove untagged images
echo "Removing images:" >&2
untagged_images 3 | xargs --no-run-if-empty docker rmi

Fuente: https://github.com/blueyed/dotfiles/blob/master/usr/bin/docker-cleanup


Eliminando todos los contenedores del shell de Windows:

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

Hay una nueva característica en Docker 1.13.x llamada poda de contenedor Docker : docker container prune

Esto hará lo que quieras y debería funcionar en todas las plataformas de la misma manera.

También hay una poda del sistema Docker : docker system prune , que limpiará contenedores, imágenes, volúmenes y redes, todo en un solo comando.

Respuesta original:

Se ha hablado un poco sobre un comando de limpieza de Docker. Puede encontrar la información en este ticket: Implementar un comando 'limpiar' (# 928)

Hasta que ese comando esté disponible, puede enlazar los comandos de Docker junto con otros comandos de Unix para obtener lo que necesita. Aquí hay un ejemplo sobre cómo limpiar los 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, cuando sea necesario, este ejemplo es de https://twitter.com/jpetazzo/status/347431091415703552 .


Para cualquier persona interesada, tomé el ejemplo de qkrijger y lo convertí en un claro todo (detener y eliminar todo)

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

Para remover TODOS los recipientes sin llanto:

sudo docker ps -a | grep -v CONTAINER | awk '{print $1}' | xargs --no-run-if-empty sudo docker rm -f

Primero, deja de correr los contenedores antes de intentar eliminarlos.

Retire los contenedores que corren

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

Podrías usar kill lugar de stop . En mi caso, prefiero stop ya que tiendo 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:

Error: Imposible eliminar un contenedor en ejecución, deténgalo primero

Quitar todos los contenedores

docker rm $(docker ps -a -q)

Pruebe este comando para limpiar los contenedores y las imágenes colgantes.

docker system prune -f


Retire los 5 contenedores más antiguos:

docker rm `docker ps -aq | tail -n 5`

Vea cuántos contenedores quedan:

docker ps -aq | wc -l

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 con docker ps --since <container-ID> . Esta característica está al menos en la versión 0.6.5 de Docker.

Digamos que usted 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 la docker ps .

Retire los contenedores creados antes que otro contenedor.

docker rm $(docker ps --before 9c49c11c8d21 -q)

Otro ejemplo. Ya tienes tu base de datos ejecutándose en un contenedor Docker. Ha desarrollado su aplicación para ejecutarse en otro contenedor y ahora tiene una cantidad de contenedores innecesarios.

Eliminar los contenedores creados después de un determinado contenedor.

docker rm $(docker ps --since a6ca4661ec7f -q)

Docker almacena contenedores en /var/lib/docker/containers en Ubuntu. Creo que los contenedores adicionales no hacen ningún otro daño, pero ocupan espacio en el disco.


Siempre utilizo docker rmi $(docker ps -a -q) para eliminar todas las imágenes.

Puede eliminar el directorio /var/lib/docker/graph cuando el docker rmi falló.


https://github.com/HardySimpson/docker-cleanup

Limpieza de la plataforma

Una pequeña carcasa todo en uno, que elimina:

  • Contenedores que no se ejecutan hace más de un día.
  • Imágenes que no pertenecen a ningún contenedor restante.

La intención de ejecutar como un trabajo crontab

Característica

  • Se eliminarán todas las imágenes <none>:<none>
  • Si la imagen tiene varias referencias de etiqueta de repo: a ella, eliminará todas las etiquetas de repo: excepto con la ejecución de un contenedor. En realidad, es una naturaleza de "docker rmi".
  • Se mostrarán muchos mensajes de error en la pantalla, y puede decidir si desea 2>/dev/null o no
  • Aprende algo de docker-gc y resuelve su problema (no puede eliminar la imagen que tiene la etiqueta de repo: mutliple)

La forma oficial es:

docker rm `docker ps -aq`

Los mantenedores de Docker han indicado que no habrá ningún comando para esto, y usted compone los comandos así:

Hemos discutido esto antes y preferimos que los usuarios usen la línea anterior sin tener que agregar código adicional a Docker.


Actualización: A partir de la versión 1.13 de Docker (lanzada en enero de 2017), puede emitir el siguiente comando para limpiar los contenedores detenidos, los volúmenes no utilizados, las imágenes colgantes y las redes no utilizadas:

docker system prune

Si desea asegurarse de que solo está eliminando contenedores que tienen un estado de exited , use esto:

docker ps -aq -f status=exited | xargs docker rm

De manera similar, si está limpiando cosas de la ventana acoplable, puede deshacerse de las imágenes sin etiquetar y sin nombre de esta manera:

docker images -q --no-trunc -f dangling=true | xargs docker rmi

Nueva forma: spotify / docker-gc juega el truco.

 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc spotify/docker-gc
  • Los contenedores que salieron hace más de una hora se eliminan.
  • Las imágenes que no pertenecen a ningún contenedor restante después de eso se eliminan.

Ha apoyado ajustes ambientales

Forzando la eliminación de imágenes que tienen múltiples etiquetas

 FORCE_IMAGE_REMOVAL=1

Forzando la eliminación de contenedores

 FORCE_CONTAINER_REMOVAL=1 

Excluyendo contenedores recientemente salidos e imágenes de la recolección de basura

 GRACE_PERIOD_SECONDS=86400

Esta configuración también evita la eliminación de imágenes creadas hace menos de GRACE_PERIOD_SECONDS segundos atrás.

Carrera seca

 DRY_RUN=1

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

 docker ps -a -q -f status=exited | xargs --no-run-if-empty docker rm
             OR 
 docker rm $(docker ps -a -q)

borra todas las imágenes asociadas con los contenedores docker que no se están ejecutando

 docker images -q | xargs --no-run-if-empty docker rmi

limpie los volúmenes de la ventana acoplable huérfanos para la versión de la ventana acoplable 1.10.x y superior

 docker volume ls -qf dangling=true | xargs -r docker volume rm

Basado en el periodo de tiempo

 docker ps -a | grep "weeks ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "days ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm
 docker ps -a | grep "hours ago" | awk "{print $1}" | xargs --no-run-if-empty docker rm

Retire todos los contenedores detenidos.

sudo docker rm $ (sudo docker ps -a -q)

Esto eliminará todos los contenedores detenidos al obtener una lista de todos los contenedores con la ventana acoplable ps -a -q y pasar sus identificadores a la ventana acoplable. 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 las imágenes antiguas para ahorrar algo de espacio.

sudo docker rmi $ (imágenes de sudo docker -q --filter "dangling = true")


#!/bin/bash
# docker-gc --- Remove stopped docker containers

RUNNING=$(docker ps -q)
ALL=$(docker ps -a -q)

for container in $ALL ; do
    [[ "$RUNNING" =~ "$container" ]] && continue
    echo Removing container: $(docker rm $container)
done






docker