当前位置 主页 > 服务器问题 > nginx问题汇总 >

    滚动 docker 中的 nginx 日志思路详解

    栏目:nginx问题汇总 时间:2019-03-19 16:08

    Nginx 自己没有处理日志的滚动问题,本文笔者介绍如何滚动运行在 docker 中的 nginx 日志文件,感兴趣的朋友一起看看吧

    docker使用

      1. docker ps 查看运行中的容器

      2. docker images 查看docker镜像

      3. docker rm id(容器id)  删除容器(容器id可以通过docker ps查看,容器必须停止后才能删除)

        3.1 删除全部的容器 docker rm `docker ps -a -q`

      4. docker stop  id(容器id) 停止容器运行

      5. docker rmi  id(镜像id) 删除镜像

      6. docker pull ubuntu:16.04(镜像名称:版本号) 下载镜像

      7. docker run -it ubuntu:16.04 创建并运行容器容器

        -t 表示在新容器内指定一个伪终端或终端

        -i 表示允许我们对容器内的 (STDIN) 进行交互

        -p 指定映射端口

        -d 在后台运行容器并打印容器ID

        7.1 docker run -dit ubuntu:16.04 创建并后台运行容器

        7.2 docker run -ditp 8080:8080(主机端口:容器端口) ubuntu:16.04 创建并后台运行容器且映射容器的端口

      8. docker attach id(容器id) 进入正在运行中的容器环境

      9. 退出容器

        9.1 exit 直接退出容器并终止容器运行

        9.2 [ctrl+p]+[ctrl+q](快捷键) 退出容器,但是不会终止容器运行

      10. docker commit -m'版本标识' id(容器id) ubuntu:16.04(镜像与版本号)   提交镜像且生成镜像(可以通过该命令把搭建好的容器打包成一个新的镜像或者覆盖原镜像(即是修改原镜像内容,生成的镜像名与版本号相同就可以直接覆盖))

    好了,大家了解了docker,下面是本文介绍的重点,一起看看吧。

    Nginx 自己没有处理日志的滚动问题,它把这个球踢给了使用者。一般情况下,你可以使用 logrotate 工具来完成这个任务,或者如果你愿意,你可以写各式各样的脚本完成同样的任务。本文笔者介绍如何滚动运行在 docker 中的 nginx 日志文件(下图来自互联网)。

    思路

    Nginx 官方其实给出了如何滚动日志的说明:

    Rotating Log-files
    In order to rotate log files, they need to be renamed first. After that USR1 signal should be sent to the master process. The master process will then re-open all currently open log files and assign them an unprivileged user under which the worker processes are running, as an owner. After successful re-opening, the master process closes all open files and sends the message to worker process to ask them to re-open files. Worker processes also open new files and close old files right away. As a result, old files are almost immediately available for post processing, such as compression.

    这段说明的大意是:

    •先把旧的日志文件重命名
    •然后给 nginx master 进程发送 USR1 信号