2015-12-10 31 views
5

La mia storiaCome evitare di schiacciare Docker con troppi contenitori?

C'era una volta mi chiamavo Docker da una coda di PHP laravel di elaborare migliaia di file multimediali. Il mio codice creerebbe un nuovo contenitore per ogni attività che volevo completare (ad esempio "processo", "ricerca", "sezione" ecc.). Poi sono andato a letto e il disastro ha colpito. Mi sono svegliato con un file di log da 1 TB e poche centinaia di migliaia di contenitori in vari stati.

Docker non funziona più. Come in, quando digito docker version (o docker anything per quella materia) rimane solo lì e guarda. Vorrei evitare la reinstallazione, ma non riesco a rimuovere i contenitori tramite lo standard docker rm $(docker ps -a -q) perché Docker è diventato molto, molto depresso.

Le mie domande

  1. Come posso rimuovere i contenitori della finestra mobile, se il demone finestra mobile non risponde?

  2. Il mio codice utilizza Docker come eseguibile glorificato utilizzando l'API docker. Quali passi extra ho bisogno che il mio codice prenda per pulirsi dopo se stesso in futuro?

  3. In generale, ho notato che quando provo a far ruotare troppi contenitori (cioè 20) allo stesso tempo, Docker era incline al timeout. Mi piacerebbe essere in grado di manovrare quel dial-up.

Alcune informazioni

Ecco come Attualmente sto chiamando il demone:

$> 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) 
+0

È possibile utilizzare i comandi della finestra mobile? –

+0

@ M.Carlson Non ho più l'ambiente impostato con il problema, quindi non posso verificarlo, ma alla fine tutto ciò che interagiva con il demone docker si bloccava. – slifty

risposta

0

ho fatto qualche ricerca.

Come rimuovere i contenitori di finestra mobile se il daemon docker non risponde?

In Ubuntu, i contenitori sono memorizzati nella directory /var/lib/docker/containers. Elimina i contenuti di quella directory e le cose vanno molto meglio. Questo vivrà in altri luoghi a seconda del sistema e della configurazione di installazione.

Inoltre, per chiunque fosse curioso, c'erano circa 250k contenitori che dovevano essere rimossi. Dato il numero di file che dovevo andare con INCREDIBILMENTE PERICOLOSO: ls /var/lib/docker/containers | xargs -n200 rm -rf < - NON SCRIVERE NELLA TUA LINEA DI COMANDO SE NON CONOSCETE COSA STAI FACENDO.

Utilizzo Docker come un eseguibile glorificato chiamato dal codice che utilizza la propria API. Quali passi extra ho bisogno che il mio codice prenda per pulirsi dopo se stesso in futuro?

Se il contenitore non verrà più utilizzato, è necessario rimuoverlo "ufficialmente" dopo aver terminato. Sulla riga di comando questo sarebbe stato fatto usando docker rm $(containername) e nel codice dipenderà completamente da come si accede alla finestra mobile. Ho sentito che puoi anche eseguire la finestra mobile utilizzando docker run --rm che verrà ripulito dopo la chiusura.

Ho scoperto che anche dopo aver tentato di rimuovere programmaticamente, ci saranno casi in cui i contenitori non si chiudono. Per impedire che ho creato un cron che sarebbe regolarmente docker ps -a | awk '{print $1}' | xargs docker rm

Ho notato che quando si tenta di girare troppe (cioè 20) i contenitori contemporaneamente, Docker era soggetto a timeout.

Si è interrotto una volta che ho risolto le cose, tuttavia continuo a pensare che dovrei usare qualcosa di più simile a Docker Swarm per questo caso d'uso. Nel mio caso ho deciso di configurare semplicemente l'ambiente di produzione per rimuovere la necessità di docker lì (che è dove stava usando più thread).

Problemi correlati