2017-09-20 14 views
3

로그를 쓰는 도킹 컨테이너가 nginx이고 /var/log/nginx logrotate가 도킹 장치 컨테이너에 설치되어 있고 nginx의 logrotate 구성 파일이 올바르게 설정되어 있습니다. 로그는 logrotate에 의해 자동으로 회전되지 않습니다. 로그를 수동으로 강제로 회전하여 logrotate -f /path/to/conf-file을 통해 로그를 회전하면 예상대로 작동합니다.Logrotate - nginx 로그가 도커 컨테이너 내에서 회전하지 않음

내 결론은 무엇인가가 크론을 발사하지 못하지만 이유를 찾을 수 없다는 것입니다.

다음은 고정 표시기 컨테이너 실행 Nginx에 대한 Dockerfile입니다 :

FROM nginx:1.11 

# Remove sym links from nginx image 
RUN rm /var/log/nginx/access.log 
RUN rm /var/log/nginx/error.log 

# Install logrotate 
RUN apt-get update && apt-get -y install logrotate 

# Copy MyApp nginx config 
COPY config/nginx.conf /etc/nginx/nginx.conf 

#Copy logrotate nginx configuration 
COPY config/logrotate.d/nginx /etc/logrotate.d/ 

그리고 고정 표시기-구성 파일 : 은/etc/logrotate에 :

version: '2' 
services: 
    nginx: 
    build: ./build 
    restart: always 
    ports: 
     - "80:80" 
     - "443:443" 
    volumes: 
     - ./auth:/etc/nginx/auth 
     - ./certs:/etc/nginx/certs 
     - ./conf:/etc/nginx/conf 
     - ./sites-enabled:/etc/nginx/sites-enabled 
     - ./web:/etc/nginx/web 
     - nginx_logs:/var/log/nginx 
    logging: 
     driver: "json-file" 
     options: 
     max-size: "100m" 
     max-file: "1" 

volumes: 
    nginx_logs: 

networks: 
    default: 
    external: 
     name: my-network 

다음의 내용입니다를. d/nginx

/var/log/nginx/*.log { 
     daily 
     dateext 
     missingok 
     rotate 30 
     compress 
     delaycompress 
     notifempty 
     create 0640 www-data adm 
     sharedscripts 
     prerotate 
       if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ 
         run-parts /etc/logrotate.d/httpd-prerotate; \ 
       fi \ 
     endscript 
     postrotate 
       [ -s /run/nginx.pid ] && kill -USR1 `cat /run/nginx.pid` 
     endscript 
} 
,

내용 /etc/cron.daily/logrotate

#!/bin/sh 

test -x /usr/sbin/logrotate || exit 0 
/usr/sbin/logrotate /etc/logrotate.conf 

내용 /etc/logrotate.conf

# see "man logrotate" for details 
# rotate log files weekly 
weekly 

# keep 4 weeks worth of backlogs 
rotate 4 

# create new (empty) log files after rotating old ones 
create 

# uncomment this if you want your log files compressed 
#compress 

# packages drop log rotation information into this directory 
include /etc/logrotate.d 

# no packages own wtmp, or btmp -- we'll rotate them here 
/var/log/wtmp { 
    missingok 
    monthly 
    create 0664 root utmp 
    rotate 1 
} 

/var/log/btmp { 
    missingok 
    monthly 
    create 0660 root utmp 
    rotate 1 
} 

# system-specific logs may be configured here 
사람이 올바른 방향으로 날 지점 수

이유의 nginx의 의 로그가 logrotate에 의해 자동으로 회전되지 않습니까?

편집

나는 컨테이너에서 실행되고 있지 크론 서비스에이 문제의 근본 원인을 추적 할 수 있습니다. 가능한 해결책은 컨테이너가 nginx와 cron 서비스를 동시에 실행할 수있는 방법을 찾는 것입니다.

답변

2

내 질문에 편집에 명시된 바와 같이 CMD에서 nginx:1.11까지는 nginx 프로세스 만 시작한다는 것이 문제였습니다. 업무용은 약이 nginx:1.11 그것을 시작으로 nginx를 시작뿐만 아니라 크론 서비스를 시작합니다 내 Dockerfile

CMD service cron start && nginx -g 'daemon off;' 

에서 다음 명령을 배치하는 것입니다.

Dockerfile가 보일 것 같은 뭔가 :

FROM nginx:1.11 

# Remove sym links from nginx image 
RUN rm /var/log/nginx/access.log 
RUN rm /var/log/nginx/error.log 

# Install logrotate 
RUN apt-get update && apt-get -y install logrotate 

# Copy MyApp nginx config 
COPY config/nginx.conf /etc/nginx/nginx.conf 

#Copy logrotate nginx configuration 
COPY config/logrotate.d/nginx /etc/logrotate.d/ 

# Start nginx and cron as a service 
CMD service cron start && nginx -g 'daemon off;'