在 Docker 容器中滚动 Nginx 日志有多种方法,以下是几种常用方案:
创建 logrotate 配置文件 (/etc/logrotate.d/nginx
):
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
在 Dockerfile 中安装 logrotate:
RUN apt-get update && apt-get install -y logrotate
COPY nginx-logrotate /etc/logrotate.d/nginx
确保日志目录存在并正确挂载
配置 Docker 使用 json-file 日志驱动并设置大小限制:
docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 nginx
或者在 docker-compose.yml 中配置:
services:
nginx:
image: nginx
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
进入容器执行:
docker exec -it nginx_container bash -c 'kill -USR1 $(cat /var/run/nginx.pid)'
或者直接发送信号:
docker kill -s USR1 nginx_container
挂载日志目录:
docker run -v /host/logs:/var/log/nginx nginx
在宿主机上设置 cron 任务:
0 0 * * * /usr/bin/docker exec nginx_container bash -c 'mv /var/log/nginx/access.log /var/log/nginx/access-$(date +\%Y\%m\%d).log && kill -USR1 $(cat /var/run/nginx.pid)'
您需要哪种更详细的实现方案?或者您有特定的环境要求需要考虑吗?