¿Debería preocuparme por el exceso de contenedores Docker que no funcionan?
Cada comando docker run
, o cada comando RUN
dentro de un Dockerfile, crea un contenedor. Si el contenedor ya no se está ejecutando, todavía se puede ver con docker ps -a
.
¿Debería preocuparme por tener una enorme lista de contenedores que no funcionan? ¿Debería emitir docker rm
en contenedores que no funcionan?
No estoy seguro de las penalizaciones de rendimiento o memoria/almacenamiento en las que incurren estos contenedores que no se ejecutan.
4 answers
Los contenedores que no se están ejecutando no están tomando ningún recurso del sistema además del espacio en disco.
Por lo general, es bueno limpiar después de ti mismo, pero si tienes muchos de ellos sentados alrededor no debería ralentizar el rendimiento en absoluto.
Si nota una ralentización al ejecutar comandos de docker con muchos contenedores detenidos, podría ser un error en docker, y debería enviar un error.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-10 13:21:41
El docker run
la documentació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, sino que agregar --rm=true
o simplemente el short-hand --rm
funcionará de la siguiente manera:
sudo docker run -i -t --rm ubuntu /bin/bash
Cuando salga del contenedor, se eliminará automáticamente.
Puede probar esto listando sus contenedores docker en una ventana de terminal:
watch -n1 'sudo ls -c /var/lib/docker/containers'
Y luego en otra ventana ejecuta este comando para ejecutar varios contenedores docker que se cerrarán automáticamente después de dormir durante un máximo de 10 segundos.
for i in {1..10}; do sudo docker run --rm ubuntu /bin/sleep $i & done
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-10 07:08:11
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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-12 10:32:21
No estoy seguro de las penalizaciones de rendimiento o memoria/almacenamiento en las que incurren estos contenedores que no se ejecutan.
Para evaluar la cantidad de almacenamiento que están utilizando los contenedores Docker no en ejecución, puede ejecutar:
docker ps --size --filter "status=exited"
-
--size
: muestra el tamaño total de los archivos (FYI: Explica la columna de TAMAÑO en "docker ps-s" y qué significa la palabra clave "virtual" #1520). -
--filter "status=exited"
: enumerar solo los contenedores detenidos .
Equivalentemente, , podría ejecutar: docker container ls --filter "status=exited"
También puede usar el comando docker system df
(introducido en Docker 1.13.0) para ver el uso del disco docker, 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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-27 06:04:54