插件窝 干货文章 怎么滚动docker中的nginx日志

怎么滚动docker中的nginx日志

logrotate Nginx Docker 日志 235    来源:    2025-04-21

滚动Docker中Nginx日志的方法

在Docker环境中滚动Nginx日志有几种常用方法,下面我将介绍最有效的几种方案:

方法一:使用logrotate工具

  1. 创建logrotate配置文件

    sudo nano /etc/logrotate.d/nginx-docker
    
  2. 添加以下内容(根据实际情况调整路径):

    /var/lib/docker/containers/*/*-json.log {
       daily
       rotate 7
       compress
       delaycompress
       missingok
       notifempty
       copytruncate
    }
    
  3. 测试配置

    sudo logrotate -vf /etc/logrotate.d/nginx-docker
    

方法二:使用Docker日志驱动

  1. 修改Docker daemon配置(适用于所有容器):

    sudo nano /etc/docker/daemon.json
    
  2. 添加日志限制

    {
     "log-driver": "json-file",
     "log-opts": {
       "max-size": "10m",
       "max-file": "3"
     }
    }
    
  3. 重启Docker

    sudo systemctl restart docker
    

方法三:容器内使用logrotate

  1. 创建Dockerfile

    FROM nginx:latest
    RUN apt-get update && apt-get install -y logrotate
    COPY nginx-logrotate /etc/logrotate.d/nginx
    
  2. 创建nginx-logrotate文件

    /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
    }
    
  3. 构建并运行容器

    docker build -t nginx-with-logrotate .
    docker run -d nginx-with-logrotate
    

方法四:使用外部日志系统

考虑将日志发送到外部系统如: - ELK Stack (Elasticsearch, Logstash, Kibana) - Fluentd - Graylog - AWS CloudWatch Logs

注意事项

  1. 对于生产环境,建议使用方法二或方法四
  2. 滚动日志后,确保Nginx能继续写入新日志(通常需要发送USR1信号)
  3. 考虑日志的存储位置和权限问题
  4. 对于高流量网站,日志滚动频率可能需要调整

您需要哪种具体实现方式?或者您有特定的环境限制需要考虑吗?