web-dev-qa-db-esp.com

Cómo quitar los viejos contenedores Docker

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. El docker rm 3e552code34a te permite eliminar uno solo, pero ya tengo muchos. 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.

1097
qkrijger

Hay una nueva característica en Docker 1.13.x called Docker container Prune : docker container Prune

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

También hay un Docker system Prune : docker system Prune, que limpiará contenedores, imágenes, volúmenes y redes 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 'limpio' (# 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 de 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 .

1254
Ken Cochrane

Otro método, que obtuve de Guillaume J. Charmes (crédito donde se debe):

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

se eliminarán 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 para VonC ( más adelante en este hilo ):

docker system Pruneeliminará TODOS los datos no utilizados (es decir, en orden: contenedores detenidos, volúmenes sin contenedores e imágenes sin contenedores).

Ver PR 26108 y cometer 86de7c0 , que están introduciendo algunos comandos nuevos para ayudar a facilitar la visualización de la cantidad de espacio que los datos del demonio Docker están ocupando en el disco y permiten limpiar fácilmente "innecesarios" exceso.

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
610
qkrijger

Respuesta actualizada Usa docker system Prune o docker container Prune ahora. Ver respuesta actualizada de VonC .

Respuesta anterior Al componer varios consejos diferentes arriba, 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 de 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)
404
Ryan Walls

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.

249
Michael Neale

Con Docker 1.13 (Q4 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) solo imágenes colgantes, o imágenes sin etiqueta, como comentó by smilebomb .

Vea PR 26108 y commit 86de7c0 , que están introduciendo algunos comandos nuevos para ayudar a facilitar la visualización de la cantidad de espacio que los datos del demonio Docker están tomando en el disco y permiten limpiar fácilmente el exceso innecesario.

docker system Prune -a

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

Como wjv comentarios,

También hay docker {container,image,volume,network} Prune, que puede usarse para eliminar instancias no utilizadas de solo one tipo de objeto.

Introducido en commit 913e5cb , solo para Docker 1.13+.

docker container Prune
122
VonC

Ahora es posible usar filtrando con docker ps:

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

Y para imágenes :

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

Sin embargo, cualquiera de ellos causará que docker rm o docker rmi arrojen un error cuando no haya contenedores coincidentes. El truco anterior de 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 su ~/.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 ps.

103
caktux

ACTUALIZADO 2017 (NEWEST)

docker container Prune

Esta - 2017 (ANTIGUO) camino

Para eliminar TODOS LOS CONTENEDORES DETENIDOS

docker rm $(docker ps -a -q)

Para eliminar TODOS LOS CONTENEDORES (DETENIDO Y NO DETENIDO)

docker rm  -f $(docker ps -a -q)
91
levi

Retire todos los contenedores detenidos:

docker rm $(docker ps -a | grep Exited | awk '{print $1}')

Del comentario de pauk960 :

Dado que la versión 1.3.0 puede usar filtros con docker ps, en lugar de grep Exited use docker ps -a -f status=exited. Y si usa -q con él, puede obtener ID de contenedor solo en lugar de la salida completa, no es necesario usar awk para eso.

49
montells

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 docker ps.

Eliminar 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.

33
vesako

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 los contenedores que tienen un estado 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
32
L0j1k

Aquí está mi script 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

22
blueyed

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

Retire los contenedores que corren

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 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)
13
Ulises

Eliminando todos los contenedores de Windows Shell:

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

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

Limpieza de la plataforma

Una pequeña Shell 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 de <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 usted puede decidir 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)
9
HardySimpson

Utilizar:

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

Detiene a la fuerza y ​​elimina todos los contenedores presentes localmente.

8
Shashank G

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")

7
Ric_Harvey

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 versión que uso con git tag y siempre etiquetando la última imagen de Docker con "más reciente". Esto significa que sin limpiar nada, mis imágenes de Docker terminan pareciendo:

REPOSITORY              TAG       IMAGE ID        CREATED         VIRTUAL SIZE
some_repo/some_image    0.0.5     8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    latest    8f1a7c7ba93c    23 hours ago    925.4 MB
some_repo/some_image    0.0.4     0beabfa514ea    45 hours ago    925.4 MB
some_repo/some_image    0.0.3     54302cd10bf2    6 days ago      978.5 MB
some_repo/some_image    0.0.2     0078b30f3d9a    7 days ago      978.5 MB
some_repo/some_image    0.0.1     sdfgdf0f3d9a    8 days ago      938.5 MB

Ahora, por supuesto, no quiero que todas mis imágenes (o contenedores) vuelvan a la perpetuidad en todas mis cajas de producción. Solo quiero los últimos 3 o 4 para hacer rollbacks y deshacerme de todo lo demás. La tail de Unix es tu mejor amiga aquí. Ya que docker images y docker ps se ordenan por fecha, podemos usar tail para seleccionar todos menos los tres primeros y eliminarlos:

docker rmi $(docker images -q | tail -n +4)

Ejecute eso 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 abarrotar cosas con imágenes antiguas.

Personalmente, solo tengo un contenedor en mi caja de producción en cualquier momento, pero puedes hacer lo mismo con los contenedores si quieres más:

docker rm $(docker ps -aq | tail -n +4)

Finalmente, en mi ejemplo simplificado, solo tratamos con un repositorio a la vez, pero si tiene más, puede ser un poco más sofisticado con la misma idea. Digamos que solo quiero mantener las últimas tres imágenes de some_repo/some_image. Simplemente puedo mezclar grep y awk y seguir mi camino:

docker rmi $(docker images -a | grep 'some_repo/some_image' | awk '{print $3}' | tail -n +4)

Una vez más, la misma idea se aplica a los contenedores, pero la obtienes para este punto, así que dejaré de dar ejemplos.

7
Eli

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 los contenedores salidos recientemente y las 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.

Ejecución en seco

 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)

eliminar todas las imágenes asociadas con contenedores de ventana acoplable que no se están ejecutando

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

limpiar 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 período 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
6
f-society

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
5
Pithikos
  1. Eliminar todos los procesos de la ventana acoplable:

    docker rm $(docker ps -a -q)
    
  2. Retire el contenedor específico:

    $ docker ps -a (lists all old containers)
    
    $ docker rm container-Id
    
5
padakpadak

Puede usar el siguiente comando para eliminar los contenedores salidos:

docker rm $(Sudo docker ps -a | grep Exit | cut -d ' ' -f 1)

Aquí está el Gist completo para eliminar también las imágenes antiguas en la ventana acoplable: Gist para eliminar los contenedores e imágenes antiguos de Docker .

4
urodoz
#!/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
3
mckoss

Solo se pueden quitar los contenedores parados. Detenlos todos al principio

docker stop $(docker ps -a -q)

A continuación, puede eliminar

docker rm $(docker ps -a -q)

3
Marcin Szymczak

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

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

3
sunny

Pruebe este comando para limpiar contenedores e imágenes colgantes.

docker system Prune -f
3
Pal

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.

3

Utilice los siguientes comandos anidados:

$ Sudo docker stop $(Sudo docker ps -a -q)

Este comando detiene todos los contenedores en ejecución.

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

Este comando elimina todos los contenedores.

2
Rahul Bagad

Si desea limpiar automáticamente/periódicamente los contenedores salidos y eliminar imágenes y volúmenes que no están siendo utilizados por un contenedor en ejecución, puede descargar la imagen meltwater/docker-cleanup.

Utilizo esto en producción ya que implementamos varias veces al día en varios servidores, y no quiero ir a todos los servidores para limpiar (eso sería una molestia).

Solo corre:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

Se ejecutará cada 30 minutos de forma predeterminada (o por mucho tiempo que lo configure con la opción DELAY_TIME = 1800) y limpiará los contenedores e imágenes salidos.

Más detalles:Limpieza Docker

2
Innocent Anigbo

Sudo docker ps -a | grep -v CONTAINER | awk '{print $1}' | xargs --no-run-if-empty Sudo docker rm -f
2
Felipe
docker rm --force `docker ps -qa`
2
Sivalingam

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

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

En Ubuntu 14.04 (Trusty Tahr):

$ for CON in `docker ps -qa`; do docker rm $CON ; done

Este es solo un comando normal de Bash, por lo que debería funcionar con todos los terminales compatibles con Bash.

2
sobi3ch

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`
2
Kraig McConaghy
#!/bin/bash

echo Cleanup unused containers
unused_containers=$(docker ps -a -q --filter="status=exited")
if [[ -n $unused_containers ]]
then
  docker rm $unused_containers
fi

echo Cleanup unused images
unused_images=$(docker images | grep '^<none>' | awk '{print $3}')
if [[ -n $unused_images ]]
then
  docker rmi $unused_images
fi
1
AleX

We can manage all the old containers, non using volumes and images by using this tool

Its a simple management UI for dockers

HOW TO DEPLOY PORTAINER

Use the following Docker commands to deploy Portainer:

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

You'll just need to access the port 9000 of the Docker engine where portainer is running using your browser.

Note: the -v /var/run/docker.sock:/var/run/docker.sock option can be used in Linux environments only.

1
Anish Varghese

Encontré que el siguiente comando es muy útil para detener y eliminar todos los contenedores. No necesita detenerse explícitamente con otro comando si está utilizando el indicador -f (force) ya que detiene todos los contenedores en ejecución:

docker rm -f $(docker ps -a -q)
1
Pinaki Mukherjee

.

List all the containers:

docker ps -a
docker ps (To list the running containers)

Once you hit docker ps -a, it will give you list of containers along with the container id (which is unique and combination of a-z, A-Z and 0-9). Copy the container id you wanted to remove and simply hit the below.

docker rm container_id

Your container will be removed along with the layers created in /var/lib/docker/aufs (if you are using Ubuntu).

1
Harshal Vaidya

docker container rm container_id

If the container is running, you have to stop it before to delete it

docker container stop container_id

And this command is to delete all existing containers

docker container rm $(docker container -a -q)
1
bountyhunter

  1. Stop the container that is being used by any running microservices

    docker stop $(docker ps -a -q)
    
  2. Remove all the containers

    docker rm $(docker ps -a -q)
    
  3. Remove single container

    docker rm container-ID
    
1
Jitendra Bhalothia

.

docker rm $(docker ps -a | grep Exited | grep -v CON | awk '{print $1}')

If you want to remove ALL the images you can use something like this.

docker rmi $(docker images | sed -n '1!p' | awk '{print $3}')

1
nPcomp

Estas dos líneas de Bash filtrarán los contenedores por algunas palabras clave antes de eliminarlos:

containers_to_keep=$(docker ps -a | grep 'keep\|Up\|registry:latest\|nexus' | awk '{ print $1 }')
containers_to_delete=$(docker ps -a | grep Exited | grep -Fv "$containers_to_keep" | awk '{ print $1 }')
docker rm $containers_to_delete

De este post .

0
Emil Salageanu

Aquí hay una secuencia de comandos para eliminar contenedores de 2 días de antigüedad (o más antiguos):

#!/bin/bash
# This script will kill and remove containers older than 2 days.
#
docker ps -aq > /scripts/containers.txt
today=`date +%Y-%m-%d`
oldate=`date --date="2 day ago" +%Y-%m-%d`
while read p; do
    cont=`docker inspect -f '{{ .Created }}' $p | cut -c 1-10`
    echo " Created date of $p is $cont"
    k=`echo $(( ( $(date -ud $today +'%s') - $(date -ud $cont +'%s'))/60/60/24 ))
    echo $k
    if [ $k -ge 2 ];
    then
            echo "Killing docker container $p"
            docker kill $p
            echo "Removing docker container $p"
            docker rm $p
    else
            echo "Docker container $p is not one day old, so keeping the container."
    fi
done </scripts/containers.txt
0
SAB

Puede usar el asistente de la ventana acoplable desde el repositorio https://github.com/kartoza/docker-helpers . Después de la instalación, simplemente escriba drmc.

0
etrimaille

Desde mi experiencia, deberías detener los contenedores antes de eliminarlos para evitar cosas como "este tipo de contenedor aún se está ejecutando", por lo que:

Sudo /usr/bin/docker ps -aq |  awk '{print $1}' | \
xargs --no-run-if-empty bash -c 'Sudo docker stop [email protected]; Sudo docker rm [email protected]' bash

Mantengo un alias en mis archivos de puntos como:

alias wipedocker="Sudo /usr/bin/docker ps -aq |  awk '{print $1}' \
| xargs --no-run-if-empty bash -c 'Sudo docker stop [email protected]; Sudo docker rm [email protected]' bash"
0
CESCO

Para eliminar simplemente todo lo que no está siendo utilizado actualmente por un contenedor en ejecución, el siguiente alias , que generalmente pongo en el .bash_profile en mi Mac, ayudará:

alias dockerclean="docker ps -q -a | xargs docker rm -v && docker images -q | xargs docker rmi"

Cada vez que se invoca dockerclean desde la línea de comandos, eliminará los contenedores detenidos y las capas de imagen no utilizadas. Para la ejecución de contenedores e imágenes usadas, imprimirá un mensaje de advertencia y lo omitirá.

0
h3nrik

Para una instalación de Linux, asegúrese de usar Sudo . También es bueno buscar imágenes que tengan meses y semanas de antigüedad:

Sudo docker ps -a | grep 'weeks ago\|months ago' | \
    awk '{print $1}' | xargs --no-run-if-empty Sudo docker rm
0
Paul Oliver

Estoy usando:

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

para borrar los contenedores salidos y:

docker rmi -f $(docker images | grep "<none>" | awk "{print \$3}")

con el fin de deshacerse de todas las imágenes sin etiquetar.

0
Alexandru Bantiuc

Uso variaciones de lo siguiente:

docker ps -a | grep 'cassandra.*Exited' | cut -d " " -f 1

La primera parte enumera todos los procesos.

El segundo selecciona solo aquellos que tienen 'cassandra' seguido de 'Exited'.

El tercero, elimina todas las pruebas después de la identificación de la imagen, para que obtenga una lista de las identificaciones de la imagen.

Asi que,

docker rm $(docker ps -a | grep 'cassandra.*Exited' | cut -d " " -f 1)
0
JRun

¡Este breve script podría ayudar (compilado de respuestas anteriores)!

#!/bin/bash

# Remove dangling images

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

if [ -n "$IMAGE_IDS" ]; then

    Sudo docker rmi $IMAGE_IDS > /dev/null 2>&1
    echo 'Images removed' $IMAGE_IDS
fi


# Remove exited containers

CONTAINER_IDS=$(Sudo docker ps -a -q -f status=exited)

if [ -n "$CONTAINER_IDS" ]; then

    Sudo docker rm -v $CONTAINER_IDS > /dev/null 2>&1
    echo 'Containers remove $CONTAINER_IDS'
fi
0
Chetan Sharma

docker rm -f $(docker ps -a -q) hará el truco. Parará los contenedores y los retirará también.

0
Jagatveer Singh

Estoy usando los siguientes comandos para eliminar Salido y Reiniciando contenedores de ventana acoplable

docker stop --force $(docker ps -a|grep Exited| awk '{print $1}')
docker rm --force $(docker ps -a|grep Exited| awk '{print $1}')
docker stop --force $(docker ps -a|grep Restarting| awk '{print $1}')
docker rm --force $(docker ps -a|grep Restarting| awk '{print $1}')

Usando el comando de abajo para eliminar imágenes nombradas como ninguna

docker image rm --force $(docker image ls  |grep none |awk '{print $3}')
0
Sijo M Cyril