[centos][docker][logrotate][nginx] 为docker内的程序配置logrotated方法

情景

一般情况下,我们都会映射一个外部目录到docker里边,docker里边的程序会将数据,包括

日志写在这个目录里,这个时候,日志是docker内外都可见的。例如常用的ngingx部署方法。

 [class_tong @ https://www.cnblogs.com/hugetong/]

背景

logrotate是一个日志回滚的工具,它会根据时间或文件大小规则,对日志文件进行切分以及删除

操作。

logrotate本身不是一个daemon进程,他是一个crond任务,每天调用一次。

另外,logrotate在做了文件操作之后是需要通知写日志的进程的,一般是发一个信号。

这个操作需要在logrotate的配置文件中显式设置。

方法

目前,我能总结出的方法。

在docker内,除了启动你的服务外,同时启动一个crond任务,在docker内完成logrotate工作。

如下生成docker镜像:注意红字

FROM nginx:1.11

# Remove sym links from nginx image
RUN rm /var/log/nginx/access.log
RUN rm /var/log/nginx/error.log

# Install logrotate
RUN apt-get update && apt-get -y install logrotate

# Copy MyApp nginx config
COPY config/nginx.conf /etc/nginx/nginx.conf

#Copy logrotate nginx configuration
COPY config/logrotate.d/nginx /etc/logrotate.d/

# Start nginx and cron as a service
CMD service cron start && nginx -g ‘daemon off;‘

在docker host上。显式的对映射出来的目录文件进行logrotate的配置,这样

传统情况下的一般配置,并没有什么不同。除了为服务进程发信号的方式,因为

我们需要将信号发到docker里面去。当然,这也没什么大不了的,方法如下:注意红字

$ sudo vi /etc/logrotate.d/test
/home/test/logs/*log {
    rotate 90
    missingok
    ifempty
    sharedscripts
    compress
    postrotate
        docker exec -it nginx-test nginx -s reload > /dev/null 2>/dev/null || true
    endscript
}

在方法三面前,前两者都弱爆了。它是这样的:在docker里边安装好logrote(这是必须的),

同时在docker外边的host上,安装包:docker-logrotate

我们看,这个包里都有啥:

[[email protected] ~]# rpm -ql docker-logrotate
/etc/cron.daily/docker-logrotate
/usr/share/doc/docker-logrotate-1.12.86
/usr/share/doc/docker-logrotate-1.12.86/README.docker-logrotate

只有一个cron的task,我们再来看这个task都做了什么:

[[email protected] ~]# cat /etc/cron.daily/docker-logrotate
#!/bin/sh

LOGROTATE=true
[ -f /etc/sysconfig/docker ] && source /etc/sysconfig/docker

if [ $LOGROTATE == true ]; then
    for id in $(docker ps -q); do
        exec $(docker exec $id logrotate -s /var/log/logstatus /etc/logrotate.conf > /dev/null 2>&1)
    done
fi
exit 0

它调用了,所有docker里边的logrotate。

于是,我们只需要在docker内正常的每一个docker配置logrotate就行了,host会根据这个任务自动调用他们。

 [class_tong @ https://www.cnblogs.com/hugetong/]

 

结论

综上,我们推荐,并仅推荐方法三。

参考:https://stackoverflow.com/questions/46323978/logrotate-nginx-logs-not-rotating-inside-docker-container

---

原文地址:https://www.cnblogs.com/hugetong/p/12090417.html

时间: 2024-10-07 05:27:35

[centos][docker][logrotate][nginx] 为docker内的程序配置logrotated方法的相关文章

docker 安装nginx并挂载配置文件和www目录以及日志目录

---恢复内容开始--- 一 首先 docker pull nginx 二 docker run --name myNginx -d -p 80:80 -v e:/docker/nginx/www:/www -v e:/docker/nginx/nginx.conf:/etc/nginx/nginx.conf -v e:/docker/nginx/conf.d:/etc/nginx/conf.d nginx name后面是启动的容器名称,-p是将容器内的端口映射到本机端口,  -v 是分别将本机

Docker部署Nginx、Tomcat集群

Tomcat集群由多个tomcat组成,使用Nginx的好处是可以实现负载均衡和动静分离.使用Docker的好处是~~~我们不需要复杂的配置,只需要执行简单的命令就能拉取已有的官方docker镜像,再通过一条命令就能运行我们的实例了.对于多个Tomcat,我们使用相同的镜像,然后使用简单的命令,就能创建不同的tomcat container实例. 1.拉去镜像 $ docker pull tomcat:8-jre8-alpine $ docker pull nginx:latest $ dock

necore api docker vue nginx

1. netcore api 部署 docker 不能指定 端口 //.UseUrls("http://10.43.21.156:8081") 2,vue nginx 前端访问 api nginx的配置 proxy_pass转发的路径后是否带 “/” 的意义都是不一样的(https://www.jianshu.com/p/55c0b967e1a4) 3.netcore dockerfile FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-bu

Linux下自动化部署ASP.NET CORE 3.1(Docker+Jenkins+Nginx)

1.先配置好Docker阿里云加速,可以使用阿里云容器服务 (可自己在阿里云申请,要不然安装东西直接很慢)注意:https://XXXX.mirror.aliyuncs.com为阿里云加速服务分配地址 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://XXXX.mirror.aliyuncs.com"] }

Docker + redis + nginx + tomcat

Docker + redis + nginx + tomcat 环境 pc机 机器 192.168.1.242 系统 [[email protected] ~]# uname -a Linux hdp-gp-dk02 2.6.32-504.el6.x86_64 #1 SMP Tue Sep 16 01:56:35 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux [[email protected] ~]#  cat /etc/redhat-release Red

Centos7 下面安装docker 部署Nginx

实验 环境 Centos 7 操作系统 安装docker yum install docker -y 查看docker 是否安装成功 docker -v Docker version 1.12.6, build 3a094bd/1.12.6 启动docker systemctl start docker 部署Nginx 获取基础镜像 docker pull nginx:1.10.3 查看 镜像 1.直接启动容器 docker run -d -p 8080:80 nginx:1.10.3 解释:

CentOS 6.5上安装docker与docker对中文字符集的支持

一.CentOS 6.5上安装docker 在CentOS 6.5 还不能够直接通过yum install -y docker 来安装docker服务 在一些文档中有看到说是因为内核太低的原因导致的,因为docker至少要做3.8以上的版本才能安装, 但是我发现其实并不需要升级内核就可以实现docker的安装不过,也有可能我的安装存在偶然性, 但是我还是记录一下,以防日后忘记. 1.先查看下你的系统内核是多少 # uname -r 2.6.32-431.el6.x86_64 我的是CentOS

通过nginx建立docker的私有registry

docker registry具体应用 docker registry 是管理 docker 镜像的服务,  官方registry 地址 http://hub.docker.com ,可以让我们方便的下载预先做好的镜像. $ docker pull centos 上面的命令就是缺省的从这个Docker官方源下载.在国内为了加快访问,也可以使用docker.cn 的服务,详细列出服务器的地址 如: $ docker pull docker.cn/docker/centos 企业应用时基本会创建自己

docker之NGINX镜像构建

Nginx是一个高性能的Web和反向代理服务器,它具有很多非常优越的特性:1.作为Web服务器.2.作为负载均衡服务器.3.作为邮件代理服务器.4.安装及配置简单.接下来我们介绍在docker构建nginx镜像:Docker镜像构建分为两种方式:一.手动构建二.Dockerfile(自动构建) 一.Docker镜像手动构建实例: 基于centos镜像进行构建nginx镜像 #下载镜像 [[email protected] ~]# docker pull centos [[email protec