
Mi historia
Érase una vez yo estaba llamandoEstibadordesde una cola PHP laravel para procesar miles de archivos multimedia. Mi código crearía un nuevo contenedor para cada tarea que quisiera completar (por ejemplo, "proceso", "búsqueda", "corte", etc.). Luego me fui a la cama y sobrevino el desastre. Me desperté con un archivo de registro de 1 TB y unos cientos de miles de contenedores en varios estados.
Docker ya no funciona. Como cuando escribo docker version
(o docker anything
para el caso) simplemente se queda ahí y me mira fijamente. No puedo eliminar los contenedores a través del estándar docker rm $(docker ps -a -q)
porque Docker se ha vuelto muy, muy deprimido.
Aquí hay información relevante sobre cómo llamo actualmente al demonio:
$> sudo docker daemon
INFO[0000] API listen on /var/run/docker.sock
INFO[0000] [graphdriver] using prior storage driver "aufs"
(Meanwhile in another terminal)
$> docker version
(insert infinite darkness here)
Mis preguntas
¿Cómo puedo eliminar los contenedores de Docker si el demonio de Docker no responde?
Estoy usando Docker como un ejecutable glorificado al que se llama desde el código usando su API. ¿Qué pasos adicionales debo seguir para que mi código se limpie en el futuro?
Respuesta1
Bueno, investigué un poco.
¿Cómo puedo eliminar los contenedores de Docker si el demonio de Docker no responde?
En Ubuntu, los contenedores se almacenan en el /var/lib/docker/containers
directorio. Elimine el contenido de ese directorio y las cosas estarán mucho mejor.
Además, para cualquiera que tenga curiosidad, hubo alrededor de 250.000 contenedores que tuvieron que ser retirados. Dada la cantidad de archivos que tuve que manejarls /var/lib/docker/containers | xargs -n200 rm -rf
Estoy usando Docker como un ejecutable glorificado al que se llama desde el código usando su API. ¿Qué pasos adicionales debo seguir para que mi código se limpie en el futuro?
Si el contenedor no se va a volver a utilizar, debes "eliminarlo" oficialmente una vez que hayas terminado. En la línea de comando, esto se haría usando docker rm $(containername)
y en el código dependerá completamente de cómo se accede a Docker.