之前写过一篇在宿主机上的nginx日志分割,现在应为项目运行在docker容器里面,但是容器中并不像宿主机那样安装了crontab定时任务,虽然可以将crontab打包进镜像,但是应为项目没有打包进去,所以只能只能选择其他的解决方案了。
下面我来说明一下这边的解决方案:
在创建好镜像以后,还需要通过docker run 命令来运行生成的镜像文件。但是run就需要通过参数来设置容器的一系列配置。我这里选择的是容器的host网络模式:
什么是host网络模式:简单的来说就是使用宿主机的ip地址,但是使用不同的端口区分不同的容器。这样错的好处一个是可以通过lsof 工具操作,另一个不用修改太多次。
来说一下我的操作过程:
1:docker build -t imagesName . 创建镜像
2:docker run imagesName -d --name=myname --net=host -v $(pwd)/logs/nginx:/var1/log/nginx imagesName
来说明以下:-d 就是后台运行的意思。
--name就是运行名字的容器。
--net指定host网络模式
-v 把 nginx 的日志绑定挂载到了当前目录下的 logs 目录下,这是后会在当前路径下创建一个logs文件夹
3:编写一个脚本
#!/bin/bash mv /var/log/nginx/access.log /var/log/nginx/access.log mv /var/log/nginx/error.log /var/log/nginx/error.log kill -USR1 `cat /var/run/nginx.pid`
将脚本添加到当前路径的logs/nginx路径下。
4:docker exec 容器ID bash $(pwd)/logs/nginx/脚本命令执行后,或在当前路径logs/nginx目录下出现容器中的日志文件。
5:后续就可以使用宿主机的crontab定时任务了。
* * * * * docker exec 容器ID bash $(pwd)/logs/nginx/脚本
原文:https://www.cnblogs.com/first-semon/p/13177253.html