当前位置:

首页 > 编程开发 > 如何滚动docker中的nginx日志文件

如何滚动docker中的nginx日志文件

Docker Desktop macOS版
Docker Desktop macOS版

Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

立即下载
Mac 2026-10-13
数据库 编程开发 Desktop 开发工具 服务器管理

docker使用  1.dockerps查看运行中的容器  2.dockerimages查看docker镜像  3.dockerrmid(容器id)删除容器(容器id可以通过dockerps查看,容器必须停止后才能删除)    3.1删除全部的容器dockerrm`dockerps-a-q`  4.dockerstopid(容器id)停止容器运行  5.dockerrmiid(镜像id)删除镜像  6.dockerpullubuntu:16.04(镜像名称:版本号)下载镜像  7.dockerrun-it

本文目录

    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日志文件

    思路

    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 信号
    •nginx master 进程收到信号后会做一些处理,然后要求工作者进程重新打开日志文件
    •工作者进程打开新的日志文件并关闭旧的日志文件

    其实真正需要我们做的工作只有前面两点!

    创建测试环境

    假设你的系统中已经安装好了 docker,这里我们直接运行一个 nginx 容器:

    $ docker run -d \
     -p 80:80 \
     -v $(pwd)/logs/nginx:/var/log/nginx \
     --restart=always \
     --name=mynginx \
     nginx:1.11.3

    注意,我们把 nginx 的日志绑定挂载到了当前目录下的 logs 目录下。

    把下面的内容保存到 test.sh 文件中:

    #!/bin/bash
    for ((i=1;i<=100000;i++))
    do
     curl http://localhost > /dev/null
     sleep 1
    done

    然后运行这个脚本,就可以模拟产生连续的日志记录。

    创建滚动日志的脚本

    创建 rotatelog.sh 文件,其内容如下:

    #!/bin/bash
    getdatestring()
    {
     tz='asia/chongqing' date "+%y%m%d%h%m"
    }
    datestring=$(getdatestring)
    mv /var/log/nginx/access.log /var/log/nginx/access.${datestring}.log
    mv /var/log/nginx/error.log /var/log/nginx/error.${datestring}.log
    kill -usr1 `cat /var/run/nginx.pid`

    getdatestring 函数取当前的时间并格式化为字符串,比如 "201807241310",笔者比较喜欢用日期和时间来命名文件。注意这里通过 tz='asia/chongqing' 指定了时区,因为默认情况下格式化的是 utc 时间,用起来怪怪的(要实时脑补 +8 小时)。下面的两条 mv 命令用来重命名日志文件。最后通过 kill 命令向 nginx master 进程发送 usr1 信号。

    通过下面的命令为 rotatelog.sh 文件添加可执行权限并复制到 $(pwd)/logs/nginx 目录下:

    $ chmod +x rotatelog.sh
    $ sudo cp rotatelog.sh $(pwd)/logs/nginx

    定时执行滚动操作

    我们的 nginx 运行在容器中,所以需要在容器中给 nginx master 进程发送 usr1 信号。因此我们需要通过 docker exec 命令在 mynginx 容器中执行 rotatelog.sh 脚本:

    $ docker exec mynginx bash /var/log/nginx/rotatelog.sh

    执行一次上面的命令,会如期产生一批新的日志文件:

    如何滚动docker中的nginx日志文件

    下面我们把这个命令配置在定时任务中,让它每天早上 1 点钟执行一次。执行 crontab -e 命令,并在文件的末尾添加下面的行:

    * 1 * * * docker exec mynginx bash /var/log/nginx/rotatelog.sh

    如何滚动docker中的nginx日志文件

    保存并退出就可以了。下图是笔者测试过程中每 5 分钟滚动一次的效果:

    如何滚动docker中的nginx日志文件

    为什么不在宿主机中直接 mv 日志文件?

    理论上这么做是可以的,因为通过绑定挂载的数据卷中的内容从宿主机上看和从容器中看都是一样的。但是真正这么做的时候你很可能碰到权限问题。在宿主机中,你一般使用的是普通用户,而在容器中产生的日志文件的所有者是会是特殊的用户,并且一般不会给其它用户写和执行的权限:


    如何滚动docker中的nginx日志文件

    当然,如果你在宿主机中使用的是 root 用户就不会有问题。

    能从宿主机中发送的信号吗?

    其实这个问题的全称应该是:能从宿主机中给 docker 容器中的 nginx master 进程发送信号吗?

    答案是,可以的。

    我们可以通过命令:

    $ docker container kill mynginx -s usr

    向容器中的 1 号进程(nginx master)发送 usr1 信号(这种方式只能向 1 号进程发送信号):

    如何滚动docker中的nginx日志文件

    结合上面的两个问题,我们可以写出另外的一种方式来滚动 docker 中的 nginx 日志。这种方式不需要通过 docker exec 命令在容器中执行命令,而完全在宿主机中完成所有的操作:

    •先重命名容器数据卷中的日志文件
    •给容器中的 1 号进程发送 usr1 信号

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Docker nginx
    相关文章 更多
    docker创建容器后无法启动的排查与解决方法
    docker创建容器后无法启动的排查与解决方法

    Docker容器创建后无法启动或立即退出?本文详解如何通过docker logs查看报错、检查端口占用及修正配置文件,助你快速解决容器启动难题。

    docker容器自动重启怎么解决 排查原因与修复方法
    docker容器自动重启怎么解决 排查原因与修复方法

    遇到Docker容器频繁自动重启?本文提供从查看容器日志、解读退出代码到配置Restart Policy的完整排查与修复方案,确保服务稳定性。

    docker挂载目录教程详解本地目录映射方法
    docker挂载目录教程详解本地目录映射方法

    遇到Docker容器重启后数据丢失?本文手把手教你如何使用-v参数将本地目录映射到容器内部,解决数据持久化难题,并附带权限错误排查技巧。

    飞牛音乐服务器连接失败原因排查及解决教程
    飞牛音乐服务器连接失败原因排查及解决教程

    遇到飞牛NAS音乐服务无法连接?本文提供详细的界面操作指引,涵盖服务启用检查、端口与防火墙设置、媒体库索引状态确认及客户端配置修正,助你快速恢复音乐播放。

    docker 安装 hermes agent完整部署安装教程
    docker 安装 hermes agent完整部署安装教程

    本文详细介绍如何使用 Docker 部署 Hermes Agent,涵盖镜像获取、配置文件挂载、网络设置及常见故障排查,帮助开发者实现快速、干净的服务接入。

    thinkphp项目部署指南详解服务器部署步骤
    thinkphp项目部署指南详解服务器部署步骤

    详细解析ThinkPHP项目在Linux服务器上的部署步骤,包括环境搭建、文件权限、Nginx配置及常见陷阱,提供可复制的代码示例与例外场景分析。

    skyvern官网入口及中文版使用教程
    skyvern官网入口及中文版使用教程

    Skyvern是一款基于大语言模型的开源浏览器自动化框架,目前仅提供英文界面且无官方中文版。本文指导用户通过GitHub获取源码,使用Docker快速部署本地环境,并解释其如何通过DOM树解析与自然语言指令实现网页自动操作,同时提供针对中文用户的配置建议与替代方案。

    docker 容器无法启动的配置检查命令及排查方法
    docker 容器无法启动的配置检查命令及排查方法

    当 Docker 容器启动后立即退出时,不要盲目重启。本文详解如何通过 docker logs 查看标准输出错误,利用 docker inspect 检查挂载与网络配置,并修正入口点脚本权限问题,提供一套高效的因果排查流程。

    NAS硬盘一直转正常吗怎么办?持续运转原因及解决方法
    NAS硬盘一直转正常吗怎么办?持续运转原因及解决方法

    NAS硬盘一直转动是否正常?本文深入分析导致硬盘无法进入休眠状态的四大核心原因,包括系统索引、第三方应用干扰及网络协议机制,提供可操作的排查与优化方案。

    Docker Compose 健康检查实战:用 service_healthy 消除启动竞态
    Docker Compose 健康检查实战:用 service_healthy 消除启动竞态

    解决容器已运行但应用不可用的问题。通过配置 healthcheck 探针和 depends_on service_healthy 条件,确保服务在依赖真正就绪后才启动。包含参数详解、YAML 配置示例及故障排查步骤。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。

    即将离开本站
    您即将前往第三方网站,请确认是否继续?