2017-05-02 11 views
1

Nginx에는 원시 로그 순환이 없으므로 logrotate와 같은 외부 도구가 필요합니다. Nginx는 로그를 포스트 순환 후 다시 열어야한다는 점에서 문제점을 제시합니다. pid가/var/run에서 사용 가능한 경우 USR1 신호를 보낼 수 있습니다.logginate로 nginx 로그 회전 컨테이너화

도커 컨테이너에서 실행 중일 때 pid 파일은/var/run에 없으며 (기술적으로 호스트 프로세스이므로 pid는 실제로 호스트에 속합니다.) 당신이 로그를 다시하지 않는 경우는 웹 서버로, 그렇지 않으면 계속 작동하지만

, nginx를이

+0

왜 당신이 정보가 '고정 표시기의 logs'를 통해 사용할 수있는 경우 logrotate에 사용하려는 것 :

여기에 내가 만든 /etc/logrotate.d/nginx 파일입니까? –

+0

이 순환은 프로세스 고유의 로그를위한 것이지 docker 로그가 아닙니다 - 웹 액세스 및 오류 로그입니다. –

답변

1

사용자는 PID에서 프로세스 ID를 얻을 수있는 등, 리버스 프록시, 전혀 아무것도 기록하지 않습니다 속성을 docker inspect를 사용하고 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

'도커 inspect -f '{{.State.Pid}}' '도 똑같이 할 것입니다. 대부분의 명령은 go 템플리트를 취하는'--format' 옵션을 가지고 있습니다. – Matt