2017-05-02 6 views
1

Nginxにはログのローテーションがないため、logrotateなどの外部ツールが必要です。 Nginxは、ログをポストローテーション後に再オープンする必要があるという難題を提示しています。 pidが/ var/runで利用可能な場合、USR1シグナルを送ることができます。logginateを使ったコンテナ化nginxログのローテーション

しかし、ドッカーコンテナで実行している場合、pidファイルは/ var/runにありません(実際にはホストプロセスなので、pidは実際にホストに属します)。

ログを再度開くしていない場合は、リバースプロキシ、Webサーバーとしてそれ以外の場合は機能し続けるものの、nginxのは、まったく何も記録しませんが、その他

+0

あなたは情報がドッキングウィンドウのlogs' 'を通じて利用可能な場合のlogrotateを使用したいと思う理由:

ここに私が作成した/etc/logrotate.d/nginxファイルがですか? –

+0

このローテーションは、プロセス固有のログ用であり、ドッカーログではなく、Webアクセスとエラーログ用です。 –

答えて

1

あなたは、PIDからプロセスIDを取得することができます属性をdockerで調べて、kill -USR1 {pid}を使ってnginxにログを再度表示させる。

/var/log/nginx/access.log 
{ 
    size 2M 
    rotate 10 
    missingok 
    notifempty 
    compress 
    delaycompress 
    postrotate 
     docker inspect -f '{{ .State.Pid }}' nginx | xargs kill -USR1 
    endscript 
} 
+0

'docker inspect -f '{{.State.Pid}}' 'は同じことを行います。ほとんどのコマンドはgoテンプレートをとる '--format'オプションを持っています。 – Matt

関連する問題