通常在docker运行后 docker logs [ container name ] 获取运行的容器日志 但长期会产生大量日志数据 无法快速定位到问题信息 所以定时日志分割 和清理就很必要 本文主要记录docker运行后 定时切割运行容器中的nginx日志 

docker内部日志同步宿主机

在切割之前 要需要先将docker内部的日志 同步拷贝到宿主机上面 使用挂载卷 docker run -v 宿主机日志:容器日志 在运行后则会同步日志文件到宿主机上 关于docker的其他内容可见其他文章

主要是利用 logrotate+cronb定时脚本  

/etc/logrotate.conf为配置文件  /etc/logrotate.d/docker 所有logrotate脚本放在  /etc/logrotate.d下面 具体配置如下

#日志所在路径 
/var/lib/docker/containers/vue3-ofice-new/*.log {
    daily
    rotate 7
    compress
    delaycompress         # 延迟压缩(与 compress 配合)
    missingok
    notifempty
    create 640 root root
    postrotate
# 通知 Nginx 重新打开日志文件(可选)在xxx容器 重新打开nginx日志
        docker exec XXX nginx -s reopen
    endscript
}

上面文件可以直接进行手动触发 sudo logrorate -f /etc/logrotate.d/docker 

经过检测 logrorate不会自动的进行定时切割 所以还需要用cron编辑定日任务脚本 

关于cron 

crontab -l查看 

crontab -e编辑配置

crontab 文件的格式通常如下:
# 分钟   小时   日   月   星期   命令
*       *     *    *    *      /path/to/command

/etc/crontab通过在里面添加定时任务 运行 logrotate.d/docker 脚本文件

59 23 * * * root /usr/sbin/logrotate  -f  /etc/logrotate.d/docker

logrotate  运行 对应的脚本 从而达到定时切割日志

注意操作文件的前置条件是当前用户对文件有操作权限,一般切割文件的权限只有root用户有 ,如果文件夹权限和用户权限不足,可以再 /etc/logrotate.conf 首行添加 su root root表示放行执行权限,当作使用root用户进行文件切割,安全的操作方法则是将当前用户切换到root ,或者将当前用户添加到root属组内

更多推荐