nginxとphp-fpmコンテナのログはホストにマウントされており、ホスト側からログをローテーションしたい場合。
ログ用ボリュームのマウント
こんな感じで、ホスト側のvolume/logs/nginxにひっつけてあったとする。
docker-compose.yml
nginx:
image: nginx:latest
volumes:
- ./volume/logs/nginx:/var/log/nginx
php:
image: php-fpm:latest
volumes:
- ./volume/logs/php-fpm:/var/log/php-fpm
ログローテーションの設定
dockerホスト側のlogrotationの設定をする。
圧縮ありなし、タイミング、個数等は適当に(例は日毎、30個、圧縮あり)。
nginx
ポイントはkill -s HUP nginx
の部分。
/etc/logrotete.d/nginx
/home/username/docker/volume/logs/nginx/*.log
{
missingok
notifempty
daily
rotate 30
compress
delaycompress
sharedscripts
postrotate
/usr/local/bin/docker-compose -f /home/username/docker/docker-compose.yml kill -s HUP nginx
endscript
}
php-fpm
こちらはkill -s USR1
を送る。
/etc/logrotete.d/php-fpm
/home/username/docker/volume/logs/php-fpm/*.log
{
missingok
notifempty
daily
rotate 30
compress
delaycompress
sharedscripts
postrotate
/usr/local/bin/docker-compose -f /home/username/docker/docker-compose.yml kill -s USR1 php
endscript
}
確認
強制的にローテーションさせて、ログがちゃんとローテーションされ、最新のものに書かれるかを確認。
logrotate -f /etc/logrotate.conf