Docker: come limitare la crescita incontrollata dei log dei container

(English version, Rotating Docker log files available on IT-Notes blog)

Ho già scritto in merito al fatto che io apprezzi Docker come soluzione per il deploy di specifici servizi. Invece che "sporcare" le singole distribuzioni e dover tenere tutto aggiornato alle versioni delle stesse, si può avere un sistema pulito, replicabile, aggiornabile rapidamente.

Uno dei problemi che ho riscontrato è però questo: quando si hanno dei container che non vengono aggiornati spesso (o, meglio, ricreati spesso), il loro output continua ad accumularsi in un file di log legato al container stesso. Alla fine si rischia di trovarsi con un log enorme e nessuna cognizione di come ridurne le dimensioni.

In un caso specifico, ho avuto un riempimento di disco proprio a causa di uno di questi container (gitlab) che, producendo molto output, aveva creato un json di log di svariate decine di giga in pochi mesi. Facendo una breve ricerca ho trovato la soluzione. E' semplice e Docker supporta, tramite parametri di creazione dei singoli container, la gestione dei log.

Basta dunque passare questi parametri:

--log-opt max-size=50m --log-opt max-file=5

Il container, a quel punto, limiterà il log a 50 mega (limite da definirsi in base alle proprie necessità) ed effettuerà una rotazione dei log stessi (nell'esempio, terrà al massimo 5 log).

In questo modo l'occupazione disco sarà sotto controllo. Perché, dunque, non hanno impostato un limite sano di default? Perché si parte dal presupposto che i container siano usa e getta e che, dunque, vengano spesso buttati e ricreati. La cosa ha una sua logica, ma non è certamente adatta a tutti gli innumerevoli utilizzi.

Commenti