J'ai un conteneur docker exécutant nginx qui écrit des journaux à /var/log/nginx
Logrotate est installé dans le conteneur docker et le fichier de configuration logrotate pour nginx est configuré correctement. Cependant, les journaux ne sont pas automatiquement pivotés par logrotate. Forcer manuellement la rotation du journal pour faire pivoter les journaux via logrotate -f /path/to/conf-file
fonctionne comme prévu. Ma conclusion est que quelque chose ne déclenche pas le cron au feu mais je ne peux pas trouver la raison.Logrotate - les journaux nginx ne tournent pas à l'intérieur du conteneur docker
Voici le Dockerfile pour le conteneur docker fonctionnement nginx:
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/
Et le docker-composer fichier:
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
Voici le contenu de: /etc/logrotate. 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
}
Contenu de /etc/cron.daily/logrotate
#!/bin/sh
test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf
Contenu de /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
quelqu'un peut me diriger dans la bonne direction pour pourquoi nginx les journaux ne sont pas automatiquement pivotés par logrotate?
EDIT
je peux tracer la cause profonde de ce problème au service cron pas en cours d'exécution sur le récipient. Une solution possible consiste à trouver un moyen de faire en sorte que le conteneur exécute à la fois le service nginx et le service cron.