docker-composeで動かしているNginxコンテナのログをローテートする方法です。気づいたらログでディスクが溢れちゃった...となる前に設定しておくことをおススメします。
ホスト側にNginxコンテナのログディレクトリがマウントされているとします。
1. ホスト側でlogrotateの設定を行う
設定はよしなに変更してください。
/etc/logrotate.d/nginx
/path/to/nginx/logs/*.log
{
missingok
notifempty
daily
rotate 10
compress
delaycompress
sharedscripts
postrotate
/usr/local/bin/docker-compose -f /path/to/docker-compose.yml kill -s HUP docker-service-name
endscript
}
-
postrotate
ではローテート後の処理を記述します。ローテーションを行ってもNginxは過去のログファイルに追記し続けるため、ローテート後にNginxにログを開き直させます。 - シグナルは
USR1
だと無理っぽい - 動かない場合はログファイルのパーミッションを確認しましょう
-
docker-service-name
はdocker-composeのservices
のディレクティブ名であり、コンテナ名ではないことに注意
docker-compose.yml
...
services:
nginx: // これ
...
2. テストする(強制 logrotate
)
$ logrotate -f /etc/logrotate.conf
$ ll /path/to/nginx/logs
合計 xxxxxxx
-rw-r--r-- 1 user user xxxxxxxx 5月 15 14:50 access.log
-rw-r--r-- 1 user user xxxxxxxx 5月 15 14:50 access.log-20200515
-rw-r--r-- 1 user user xxxxxxxx 5月 15 14:50 error.log
-rw-r--r-- 1 user user xxxxxxxx 5月 15 14:50 error.log-20200515
...
うまくいけば新しいログが日付のついていない *.log
の方に追記されていきます。