Rotate Docker container logs daily
This post is already over two years old. It may no longer be up to date. Opinions change. If you think someone or something is wrong feel free to contact me.
While making sure that I don't save webserver logs for longer than I actually have to I stumbled across the fact that docker cannot rotate or keep logs for a specific amount of time when using the json-file
log driver. It only has options to set a maximum filesize or a maximum number of files.
To get around that I am using good old logrotate
.
Configuring the Docker daemon
I have configured my Docker daemon to use the json-log
logging driver by default. Also I am making sure here to not write more than 30 megabytes of logs per container. If anything logs more than that I don't care anyway, nobody can read all that. This is my /etc/docker/daemon.json
:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Configuring logrotate
First of all: install logrotate
, make sure it is being run regularly. The /etc/logrotate.conf
on my system includes all files that you put in /etc/logrotate.d
:
$ cat /etc/logrotate.conf
[...]
include /etc/logrotate.d
I then added the following lines to /etc/logrotate.d/docker
:
/var/lib/docker/containers/*/*.log {
rotate 7
daily
compress
missingok
delaycompress
copytruncate
}
Log files will be rotated every day and compressed on the following run of logrotate
. And we're done.