¿Debería preocuparme el exceso de contenedores Docker que no funcionan?

142

Cada docker runcomando, o cada RUNcomando dentro de un Dockerfile, crea un contenedor. Si el contenedor ya no se está ejecutando, aún se puede ver con docker ps -a.

¿Debería preocuparme tener una lista enorme de contenedores que no funcionan? ¿Debo emitir docker rmen contenedores que no se ejecutan?

No estoy seguro de qué rendimiento o penalizaciones de memoria / almacenamiento incurren en estos contenedores que no se ejecutan.

velo9
fuente
1
Hace docker execun tiempo se agregó un comando; consulte docs.docker.com/reference/commandline/cli/#exec : ejecutará un comando desde un contenedor en ejecución.
schmunk
Para su información, si desea ver cómo eliminar los contenedores antiguos, consulte esta pregunta: stackoverflow.com/questions/17236796/…
Ryan Walls
1
@schmunk El enlace se ha movido. docs.docker.com/engine/reference/commandline/exec
akauppi

Respuestas:

72

Los contenedores que no se están ejecutando no están tomando recursos del sistema además del espacio en disco.

Por lo general, es bueno limpiar después de ti, pero si tienes muchos de ellos sentados, no debería ralentizar el rendimiento en absoluto.

Si nota una ralentización al ejecutar comandos de Docker con muchos contenedores detenidos, puede ser un error en Docker, y debe enviar un error.

Ken Cochrane
fuente
1
Los documentos para el RUNcomando ahora se han movido a: docs.docker.io/en/latest/reference/builder/#run
aculich
63

La docker rundocumentación describe cómo limpiar automáticamente el contenedor y eliminar el sistema de archivos cuando el contenedor sale:

  --rm=false: Automatically remove the container when it exits (incompatible with -d)

Lo anterior muestra que, por defecto, los contenedores no se eliminan, pero agregar --rm=trueo solo la abreviatura --rmfuncionará así:

sudo docker run -i -t --rm ubuntu /bin/bash

Cuando salga del contenedor, se eliminará automáticamente.

Puede probar esto enumerando sus contenedores acoplables en una ventana de terminal:

watch -n1 'sudo ls -c /var/lib/docker/containers'

Y luego, en otra ventana, ejecute este comando para ejecutar múltiples contenedores acoplables que saldrán automáticamente después de dormir durante hasta 10 segundos.

for i in {1..10}; do sudo docker run --rm ubuntu /bin/sleep $i & done
aculich
fuente
44
No es una respuesta directa a la pregunta , sino una respuesta interesante que les dará a los usuarios una idea de los mecanismos detrás de Docker. ¡Gracias!
thaJeztah
3
-rmestá en desuso y se eliminará en algún momento, use --rmen su lugar.
bain
5

Si ejecuta un contenedor con un volumen y no utiliza docker rm -v para eliminarlo, el volumen no se eliminará después de eliminar un contenedor. También hay un problema con un controlador de almacenamiento vfs. Si olvida limpiar, los volúmenes consumirán su espacio en disco.

zergood
fuente
2

No estoy seguro de qué rendimiento o penalizaciones de memoria / almacenamiento incurren en estos contenedores que no se ejecutan.

Para evaluar cuánto almacenamiento están utilizando los contenedores Docker que no se ejecutan, puede ejecutar:

docker ps --size --filter "status=exited"

De manera equivalente , podría ejecutar:docker container ls --filter "status=exited"

También puede usar el comando docker system df(introducido en Docker 1.13.0, enero de 2017) para ver el uso del disco acoplable, por ejemplo:

username@server:~$ docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              44                  28                  114.7GB             84.84GB (73%)
Containers          86                  7                   62.43GB             41.67GB (66%)
Local Volumes       2                   1                   0B                  0B
Build Cache                                                 0B                  0B
Franck Dernoncourt
fuente